代码之家  ›  专栏  ›  技术社区  ›  niaher

事件绑定-jquery与javascript

  •  14
  • niaher  · 技术社区  · 15 年前

    使用之间有什么区别

    $("#element").click(function() { alert("test"); });
    

    <div id="element" onclick="alert('test');"></div>
    

    性能、功能或其他方面有什么不同吗?我应该使用 jQuery方法 ,当我可以简单地使用 onclick 属性?

    2 回复  |  直到 12 年前
        1
  •  11
  •   Luca Matteis    15 年前

    Why Inline JavaScript Code Is Such A Bad Thing

    Unobtrusive JavaScript

    最好还是使用一个框架来绑定JavaScript事件,因为如果不这样做的话,有跨浏览器的事情需要你自己处理(AttachEvent….)。

        2
  •  18
  •   kangax    15 年前

    jQuery click (以及大多数其他库的事件抽象)使用标准 DOM L2 addEventListener 或MSHTML专有(稍后被其他浏览器(如Opera)复制) attachEvent 添加事件侦听器 不可用。

    如果既不 添加事件侦听器 不是 附加事件 存在(就像一些古老的浏览器一样),jquery什么也不做(比如1.4a2)。

    onclick="..." 第二个例子是 intrinsic event attribute ,并在HTML 4.01中定义。此类事件属性的值将成为事件处理程序的函数体。当事件发生时,用 event 作为第一个参数;函数范围链也是 usually augmented 包括元素的一些祖先和元素本身。

    内在事件属性的好处是 更广泛的浏览器支持 有争议地 更好的性能 . 我记得,与那些通过 添加事件侦听器 / 附件 . 我现在找不到那些测试。

    通过避免 附件 当然,您还可以避免IE中的内存泄漏。大多数流行的javascript库实际上在其事件抽象中创建循环引用,然后在IE中强制执行页面卸载清理。显然,当您避免依赖于 附加事件 .

    然而,事件属性的缺点是 缺乏可重用性 ,请 打破顾虑分离 加价污染 (影响文件的尺寸和可维护性)。记住,来自事件属性的逻辑会不断地传输到客户机,而不是作为外部脚本的一部分,该脚本只下载一次并缓存。也有可能在扩大范围内被绊倒。

    我建议你 避免事件属性 除非绝对必要。