这是一个小问题,但很重要。
我应该在执行例如 button.click(... 之前运行 .unbind('click') 吗?
基本上,如果为控件定义了一个事件,我应该在再次附加之前取消附加它吗?我知道我使用'bind()'添加的那些情况就是这样......
我知道我使用'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
它们...