Javascript覆盖事件
我有几个元素与单击事件有关:Javascript覆盖事件,javascript,events,prototypejs,Javascript,Events,Prototypejs,我有几个元素与单击事件有关: $$('.set_main').invoke('observe', 'click', set_main ); 我想改变事件观察者。我的问题是,我是否必须先用以下方法删除事件侦听器: $$('.thumb').each(function(item) { Event.stopObserving(item, 'click', set_main); }); 或者我可以简单地用$$('.set_main')覆盖它。调用('observe','click',view
$$('.set_main').invoke('observe', 'click', set_main );
我想改变事件观察者。我的问题是,我是否必须先用以下方法删除事件侦听器:
$$('.thumb').each(function(item)
{
Event.stopObserving(item, 'click', set_main);
});
或者我可以简单地用$$('.set_main')覆盖它。调用('observe','click',view)代码>
这是可行的,但我想知道这是否会影响性能。可能我会将事件侦听器保留在内存中而不使用。注销一个或多个事件处理程序
若省略了处理程序,则为该eventName注销元素上的所有事件处理程序。若同时省略eventName,则取消注册元素上的所有事件处理程序。(在每种情况下,仅影响通过Prototype注册的处理程序。)
例子
假设:
$('foo').observe('click', myHandler);
…我们可以停止使用这样的处理程序进行观察:
$('foo').stopObserving('click', myHandler);
如果我们想从“foo”中删除所有“click”处理程序,则不使用处理程序参数:
$('foo').stopObserving('click');
如果我们想从“foo”中删除所有事件的所有处理程序(也许我们即将从DOM中删除它),我们只需省略处理程序和事件名称:
$('foo').stopObserving();
常见错误
当使用实例方法作为观察者时,通常会对它们使用函数绑定,例如:
$('foo').observe('click', this.handlerMethod.bind(this));
如果这样做,则无法注销处理程序:
$('foo').stopObserving('click', this.handlerMethod.bind(this)); // <== WRONG
…然后删除:
$('foo').stopObserving('click', this.boundHandlerMethod); // <== Right
$('foo')。停止观察('click',this.boundHandlerMethod)//
$('foo').stopObserving('click', this.boundHandlerMethod); // <== Right