Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript覆盖事件_Javascript_Events_Prototypejs - Fatal编程技术网

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