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在内部使用addEventListenerattachEvent )。

基本上以现代方式注册事件是处理事件的不显眼的方式。 也可以为目标注册多个事件侦听器,您可以为同一个目标调用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中指定的事件侦听器的方式。 其好处如下:

  • 它允许为事件添加多个单个处理程序。 这对于DHTML库或Mozilla扩展尤其有用,即使使用其他库/扩展,也需要很好地工作。
  • 当听者被激活时,它可以更好地控制阶段(捕获与冒泡)
  • 它适用于任何DOM元素,而不仅仅是HTML元素。
  • 更多关于现代活动注册 - > 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功能。

    链接地址: http://www.djcxy.com/p/19533.html

    上一篇: jQuery.click() vs onClick

    下一篇: jQuery: What's the difference between '$(this)' and 'this'?