2

这是一个小问题,但很重要。

我应该在执行例如 button.click(... 之前运行 .unbind('click') 吗?

基本上,如果为控件定义了一个事件,我应该在再次附加之前取消附加它吗?我知道我使用'bind()'添加的那些情况就是这样......

4

1 回答 1

2

我知道我使用'bind()'添加的那些情况就是这样......

click(func...)只是 ) 的快捷方式bind('click',...

如果将相同的处理程序分配给控件,则应在再次附加之前将其删除。否则处理程序将被执行多次。

如果你有对处理程序的引用,你可以这样做:

$element.unbind('click', handler);

这仅删除事件处理程序handler,并保留所有其他事件处理程序。


在这种情况下,可能有趣的是事件命名空间

如果您想将多个事件处理程序绑定到一个元素,但又想防止重新绑定同一个事件处理程序(并且您没有对原始处理程序的引用),您可以使用命名空间:

$element.bind('click.onlyone', function()...);
$element.unbind('click.onlyone');
//or $element.unbind('.onlyone');
$element.bind('click.onlyone', function()...);

更新:

bind不会删除以前的处理程序。因此,如果您不想触发它们,则必须先触发unbind它们...

于 2011-05-04T11:15:08.480 回答