在任何情况下,都必须在HTML / JavaScript中使用Early-binding / inline事件属性

| 在对以下SO问题的回答中:事件绑定是什么意思?,我作了一个口吻,即使用内联JavaScript /早期绑定来绑定JavaScript事件“经常被误导”。 例如:
<input id=\"MyButton\" type=\"button\" value=\"clickme\" onlick=\"Somefunction()\" />
我在争论“后期绑定”方法,其中标记中没有引用JavaScript,据我所知这是最佳实践。但是,评论者断言,有时需要使用它,我想知道这可能是什么。 在不讨论任何一个相对优点的情况下,任何人都可以想到任何情况,这些情况指示您在后期绑定方法上使用(例如)1属性。 非常感谢     
已邀请:
        我认为许多开发人员会由于无知或缺乏知识(当然,这是很常见的)而这样做,而其余的开发人员则会这样做,因为使用HTML-JS属性比使用后期绑定更方便(如果可以)您知道某些对象和功能总是加载在每个页面上,它们只会“在那儿”。 我认为当说HTML来自AJAX回调时尤其如此。举一个例子,其中AJAX请求随HTML响应一起返回,并且HTML插入到页面中。现在,天真的开发人员会按照以下思路考虑: 我不知道响应HTML中包含哪些元素,所以我不知道需要添加什么后期绑定。 也许我需要将它们全部添加,以防万一!还是编写一些分析脚本来检测元素并将其绑定到我发现的元素? 但是,如果我需要绑定到不存在的东西怎么办?是时候编写一些长内联JavaScript了! 所有这些都可以通过使用一种无​​所不在的绑定来消除,该绑定适用于页面上所有当前和将来的元素。在jQuery中,等效值为
live()
。而不是写:
$(\'.foo\').click(function(){...});
您可以这样写:
$(\'.foo\').live(\'click\', function(){...});
现在,所有具有类名\'foo \'的元素都将在单击时执行该函数,包括当前不存在的元素。对于动态AJAX接口非常有用。 您可能已经知道了,但是我只是指出JS属性可以做的任何事情,纯JS可以做得更好,我会考虑最好的做法。     
           评论者断言,有时需要使用它 我想我是其中之一。我实际上说的是,内联侦听器“在某些情况下是一个合理的选择”。我认为在任何情况下它都是“必需的”(我理解为“必需”)。 添加内联侦听器只是在服务器上应用与添加在客户端上相同的逻辑来添加侦听器,并且具有以下优点: 可以创建和缓存标记,也可以将其用作静态页面,下载页面时,并非每个客户端都一遍又一遍地添加侦听器 完全消除了与可用元素和DOMReady或onload函数或“底部脚本”添加的侦听器之间的延迟有关的问题 带有“ onload”后备功能的各种“跨浏览器” DOMReady函数的变型已被删除-如果不使用侦听器,此类函数将无法添加侦听器 当然,这并不意味着所有侦听器都应内联添加,并且动态添加侦听器是垃圾,我只是指出这是解决某些问题的可行方法,并且在许多情况下是一种完全合理的解决方案。 如果您认为监听器的“早期绑定”是好的,那么请尽早-将它们插入行内。 :-) PS。我还认为我说我不喜欢在这种情况下使用“绑定”,因为侦听器并没有绑定到任何实际意义上的元素。它们只是元素接收相关事件时调用的函数。绑定的唯一类型是可以将侦听器的this关键字设置为引用相关元素(对于所有内联侦听器,此元素在所有浏览器中都是一致的,但对于以后添加的元素则不一定如此)。     
        
onclick
属性不好的原因:
onclick=\"foo()\"
您传递的代码字符串在单击元素时在运行时被评估。这是低效的,使用了ѭ7的恐怖 您被迫将函数“ 8”存储在全局范围内,从而用所有事件处理逻辑污染全局范围。     

要回复问题请先登录注册