jquery多重绑定

时间:2011-07-13 16:41:30

标签: javascript jquery events binding

其他程序员,假设我有一个带有点击处理程序的按钮,如下所示:

$("#save-item-btn").click(function() { saveItemDialogData(true); });  

如果再次执行相同的代码,jquery会意识到,清除先前的绑定并重新应用它还是会消耗资源或导致不必要的副作用?

感谢

4 个答案:

答案 0 :(得分:4)

如果函数被绑定两次,该函数将被添加两次,并在每次单击事件时执行两次。

如果你需要确保你没有重新绑定该函数100次,请在重新绑定之前取消绑定该函数:

$("#save-item-btn").unbind('click', doSave).click(doSave);

function doSave()
{
  saveItemDialogData(true);
}

答案 1 :(得分:3)

每次调用click()时,它都会将你给它的函数绑定到该处理程序 - 它无法判断函数是否相同。如果您想确保按钮上没有先前的点击处理程序,请首先在其上调用unbind('click'),然后附上您的点击处理程序。

请注意,直接分配给onclick属性用您分配给它的任何内容替换现有的处理程序;允许多个函数绑定到同一事件是一个jQuery功能。

答案 2 :(得分:3)

如果再次执行此代码,新功能将添加到点击队列中。正如@Faisal注意到你可以调用unbind来删除处理程序但它可以从app的其他部分删除有用的处理程序,所以你可能应该使用这样的处理程序命名空间:

$(selector).unbind('click.mynamespace');
$(selector).bind('click.mynamespace', myhandler);

这样你只会替换自己的处理程序

答案 3 :(得分:2)

它将附加第二个单击事件处理程序并保留原始处理程序。在这种情况下,你专门使用匿名函数,jQuery不可能知道是否已经附加了类似的函数。

您可以使用unbind分离以前的处理程序。最好使用如下所述的Namespaced事件:http://docs.jquery.com/Namespaced_Events