我有一个巨大的jQuery应用程序,我正在使用下面的两个方法来处理点击事件。
第一个方法
HTML
<div id="myDiv">Some Content</div>
jQuery
$('#myDiv').click(function(){
//Some code
});
第二种方法
HTML
<div id="myDiv" onClick="divFunction()">Some Content</div>
JavaScript函数调用
function divFunction(){
//Some code
}
在我的应用程序中,我使用第一种或第二种方法。哪个更好?性能更好?和标准?
恕我直言,onclick是优于.click的首选方法,仅当满足以下条件时:
页面上有很多元素
要为单击事件注册的事件只有一个
你担心手机性能/电池寿命
I formed this opinion because of the fact that the JavaScript engines on mobile devices are 4 to 7 times slower than their desktop counterparts which were made in the same generation. I hate it when I visit a site on my mobile device and receive jittery scrolling because the jQuery is binding all of the events at the expense of my user experience and battery life. Another recent supporting factor, although this should only be a concern with government agencies ;) , we had IE7 pop-up with a message box stating that JavaScript process is taking to long...wait or cancel process. This happened every time there were a lot of elements to bind to via jQuery.
关注点分离是这里的关键,因此事件绑定是普遍接受的方法。这基本上是很多现有答案的答案。
但是,不要过快地抛弃声明性标记的想法。它有它的位置,和像Angularjs这样的框架一起,它是核心。
需要有一个理解,整个<div id="myDiv" onClick="divFunction()>Some Content</div>被严重羞辱,因为它被一些开发人员滥用。所以它达到了亵渎的比例,就像桌子一样。有些开发人员实际上避免使用表格来处理表格数据。这是人们不理解行为的完美例子。
尽管我喜欢把我的行为和我的观点分开。我认为标记声明它做什么(而不是它如何做,这是行为)没有问题。它可能是一个实际的onClick属性的形式,也可能是一个自定义属性的形式,很像bootstrap javascript组件。
这样,只需看一眼标记,就可以看到它做了什么,而不是试图反向查找javascript事件绑定器。
因此,作为上述方法的第三种替代方法,使用数据属性来声明标记中的行为。行为被排除在视图之外,但一眼就能看到发生了什么。
自举的例子:
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
来源:http://getbootstrap.com/javascript/弹窗
注意:第二个示例的主要缺点是对全局名称空间的污染。这可以通过使用上面的第三种选择来避免,或者使用像Angular这样的框架及其带有自动作用域的ng-click属性。
在我看来,你的问题并不是关于是否使用jQuery。而是:在HTML中内联绑定事件更好,还是通过事件监听器绑定事件更好?
不支持内联绑定。此外,通过这种方式,您只能将一个函数绑定到某个事件。
因此,我建议使用事件侦听器。通过这种方式,您将能够将许多函数绑定到单个事件,并在需要时稍后取消它们的绑定。考虑这段纯JavaScript代码:
querySelector('#myDiv').addEventListener('click', function () {
// Some code...
});
这在大多数现代浏览器中都有效。
然而,如果你已经在你的项目中包含了jQuery -只需使用jQuery: .on或.click函数。