jQuery.click()vs onClick
我有一个巨大的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
}
我在我的应用程序中使用第一种或第二种方法。 哪一个更好? 性能更好? 和标准?
使用$('#myDiv').click(function(){
更好,因为它遵循标准事件注册模型(jQuery在内部使用addEventListener
和attachEvent
)。
基本上以现代方式注册事件是处理事件的不显眼的方式。 也可以为目标注册多个事件侦听器,您可以为同一个目标调用addEventListener()
。
var myEl = document.getElementById('myelement');
myEl.addEventListener('click', function() {
alert('Hello world');
}, false);
myEl.addEventListener('click', function() {
alert('Hello world again!!!');
}, false);
http://jsfiddle.net/aj55x/1/
为什么使用addEventListener? (来自MDN)
addEventListener是注册W3C DOM中指定的事件侦听器的方式。 其好处如下:
更多关于现代活动注册 - > http://www.quirksmode.org/js/events_advanced.html
其他方法,例如设置HTML属性,例如:
<button onclick="alert('Hello world!')">
或DOM元素属性,例如:
myEl.onclick = function(event){alert('Hello world');};
很旧,他们可以轻松写完。
应该避免使用HTML属性,因为它使标记变得更大,可读性更差。 对内容/结构和行为的担忧并没有很好地分离,这使得更难找到一个错误。
DOM元素属性方法的问题在于,每个事件只能将一个事件处理程序绑定到元素。
有关传统事件处理的更多信息 - > http://www.quirksmode.org/js/events_tradmod.html
MDN参考:https://developer.mozilla.org/en-US/docs/DOM/event
为了获得更好的性能,请使用原生JavaScript。 为了更快的开发,请使用jQuery。 检查jQuery性能比较本地元素性能。
我已经在Windows Server 2008 R2 / 7 64位上的Firefox 16.0 32位上进行了测试
$('span'); // 6,604 operations per second
document.getElementsByTagName('span'); // 10,331,708 operations/sec
对于点击事件,请检查Native Browser事件与jQuery触发器或jQuery与原生Click事件绑定。
在Windows Server 2008 R2 / 7 64位版本的32位Chrome 22.0.1229.79上进行测试
$('#jquery a').click(window.testClickListener); // 2,957 operations/second
[].forEach.call( document.querySelectorAll('#native a'), function(el) {
el.addEventListener('click', window.testClickListener, false);
}); // 18,196 operations/second
从我的理解,你的问题是不是真的关于是否使用jQuery。 相当:在HTML中通过内联绑定事件还是通过事件监听器更好?
内联绑定已弃用。 此外,这种方式只能将一个函数绑定到某个事件。
因此我推荐使用事件监听器。 这样,您就可以将许多功能绑定到单个事件,并在需要时解除绑定。 考虑这个纯粹的JavaScript代码:
querySelector('#myDiv').addEventListener('click', function () {
// Some code...
});
这适用于大多数现代浏览器。
但是,如果你已经包括jQuery的在您的项目-只需使用jQuery: .on
或.click
功能。
上一篇: jQuery.click() vs onClick
下一篇: jQuery: What's the difference between '$(this)' and 'this'?