TLTR
下面给出所有上述指定方法的解释。
$(document).on("click", "#id", function (e) { });
这种event delegation
在文档或静态父元素(比如body
) 而不是在动态 DOM 操作的情况下完成特定的特定元素。一个很好的例子是,考虑这样一种情况,您希望将事件绑定到页面加载时可能不存在的 DOM 元素,但稍后将通过远程加载或动态 DOM 将其引入 DOM操纵。如果您在新引入的元素被引入 DOM 之后立即为它绑定事件,那么您的代码将不整洁。所以在这种情况下,我们最初使用上述方法绑定事件,这样我们就不必担心绑定发生时元素是否存在。在这里,click 事件被绑定到文档,然后委托给指定的元素。由于 this 绑定到文档或静态父级,因此事件传播时间会更多,即与第二种方法相比,事件传播会很慢。But this is the preferred way of doing it
.
$("#id").on("click", function (e) { })
这种绑定用于 DOM 不需要是静态的,但您指定的元素在您绑定事件时已经存在的情况。通常我们在静态 DOM 元素的情况下这样做。唯一的问题是,只有当必须绑定事件的特定元素已经存在于 DOM 中时,才能使用这种绑定。由于这是直接绑定并且不涉及任何委托,因此与方法 1 相比,事件传播会更快。
由于第一种绑定是在文档上完成的,因此与将事件直接绑定到特定元素的第二种绑定相比,它会很慢。
$("#id").die('click').live("click",function(e){ });
和
$("#id").live("click",function(e){ });
已在 jQuery 1.7 中弃用并在 jQuery 1.9 中删除。
“由于所有.live()
事件都附加在文档元素上,因此事件在处理之前会采用最长和最慢的路径。” - 引用自https://api.jquery.com/live/。
这是您问题的答案,哪种方法更快?
Method 2 > Method 1 > Method 3 & 4
但仍然Method 1
是首选方法。