Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удаление обработчика события (https://javascript.ru/forum/events/21720-udalenie-obrabotchika-sobytiya.html)

belkir 21.09.2011 15:14

Удаление обработчика события
 
Всем привет! Парюсь с событиями.

Имею:
var myhandler = function(param1, param2)
{
...
}

some_parent()
{
...
addhandler(object, 'click', function(){ myhandler() } );
}


Возникает вопрос как удалить данный обработчик? Косяк состоит в том что удалить его легко если биндить его на событие по имени функции, но так как функция принимает входящие параметры - я так сделать не могу. Товарищи знатоки, посоветуйте решение пожалуйста.

Заранее спасибо!

Sweet 21.09.2011 15:44

Что за addhandler??? Вообще, ссылку на функцию можно получить из arguments.callee.

belkir 21.09.2011 16:15

стандартный обработчик в обёртке для кросбраузерности обернул.
можно пример показать?

Sweet 21.09.2011 16:44

Примерно так:
addhandler(object, 'click', function(){
  myhandler()
  removehandler( this, event.type, arguments.callee );
} );
Только с this в ie есть проблемы.

belkir 21.09.2011 17:45

А как-то подругому можно?

Sweet 21.09.2011 17:51

А чем так не нравится?

belkir 21.09.2011 20:52

несколько косо будет работать если биндить, скажем, onmousemove - т.к. на каждое движение курсора он будет биндить и тутже снимать бинд. А по стандарту он должен один раз забиндить и в конце процедуры снять бинд :) о как

belkir 22.09.2011 09:29

Проблема решена - сам надумал. Всем спасибо!

window_floating_move.ivf_offset = ivf_offset;
window_floating_move.ivf_target_object = ivf_target;
engine_main.set_handler( document, 'mousemove', window_floating_move );

var window_floating_move = function(ivf_event)
{
  var funcObj = arguments.callee
  ivf_target_object = funcObj.ivf_target_object;
  ivf_offset = funcObj.ivf_offset;
 ...
}

da_ff 22.09.2011 12:47

belkir,
А вот "это" типа не косо?!


Часовой пояс GMT +3, время: 20:24.