将click事件绑定到null选择器是否危险?

时间:2014-08-20 11:25:51

标签: javascript jquery performance javascript-events

如果使用on绑定空选择器,是否会出现任何错误?如果我不必自己明确检查选择器是否为null,它会简化我的代码并允许我链接一些东西。

如果我在网页上执行此操作十几次会对性能,安全性或内存泄漏造成影响吗?

$(document.body).on('click', null, function () { ... }

2 个答案:

答案 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);
});

This fiddle demonstrates this

委托事件还有其他细微之处,例如,他们不会对他们注册的元素中引发的事件做出响应,在这个例子中,点击div,这可能很重要。< / p>

无论哪种方式,如果您查看事件的注册方式,在您的情况下,您可以通过调用控制台$ ._ data(document.body,&#34; events&#34;)进行查看并查看使用您的方法并使用简写版本(即.clickon("click", function() {...})注册)的click事件处理程序,您将看到它们生成相同的对象,但选择器为null(.on( &#34;在一个案例中单击&#34;,null ...)在另一个案例中单击未定义(.click)