如果使用on
绑定空选择器,是否会出现任何错误?如果我不必自己明确检查选择器是否为null,它会简化我的代码并允许我链接一些东西。
如果我在网页上执行此操作十几次会对性能,安全性或内存泄漏造成影响吗?
$(document.body).on('click', null, function () { ... }
答案 0 :(得分:2)
如果您打算动态添加元素,使用.on()
方法绑定更高元素没有任何问题。
请记住,您必须指定一个最终定义动态添加元素的选择器。
单击标签时会触发以下代码。
$(document).on('click', 'label', function(e) {
alert('dynamically added label clicked');
});
单击任何元素时将触发此代码。
$(document).on('click', null, function (e) {
alert('fired regardless what element you clicked');
});
来自jQuery文档:
用于过滤所选元素后代的选择器字符串 这将调用处理程序。 如果选择器为null或省略,则 处理程序在到达所选元素时始终被调用。
答案 1 :(得分:1)
如果您的问题是动态添加了引发click事件的元素,您仍然可以在body上使用直接事件处理程序并捕获这些事件。
委托事件处理程序使您有机会过滤掉其中一些点击事件,但似乎并非如此,因为您将选择器设置为null。
例如,如果你有div并在里面添加按钮并为div上的click事件添加一个事件处理程序,你将捕获所有按钮的所有点击事件,甚至是动态添加的按钮事件。
<div>
<input type="button" value="add button" id="buttonAddMore"/>
<span id="whatClicked"></span>
</div>
$('div').on("click", function(event){
$('#whatClicked').text("the id of the clicked element inside the div is: " + event.target.id);
});
委托事件还有其他细微之处,例如,他们不会对他们注册的元素中引发的事件做出响应,在这个例子中,点击div,这可能很重要。< / p>
无论哪种方式,如果您查看事件的注册方式,在您的情况下,您可以通过调用控制台$ ._ data(document.body,&#34; events&#34;)进行查看并查看使用您的方法并使用简写版本(即.click
或on("click", function() {...})
注册)的click事件处理程序,您将看到它们生成相同的对象,但选择器为null(.on( &#34;在一个案例中单击&#34;,null ...)在另一个案例中单击未定义(.click)