Цитата:
Ни кто мне не сказал ничего нового. Печально. |
this.removeEventListener |
elem.addEventListener(event, handler.bind(elem), false); .... function handler() { this.removeEventListener(event, arguments.callee); }; |
А если использовать мой хелпер, получается:
eventUtility.addEvent(block_edit, "click", actions.addSeats); //в другой области видимости function addSeats() { eventUtility.removeEvent(this, "click", actions.addSeats); } Так не работало, видимо actions.addSeats считается уже другим экземпляром. arguments.callee - ссылается на сам себя, т.е. this ? Так не пробовал, может быть получится так. eventUtility.removeEvent(this, "click", arguments.callee); Благодарю за наводку, уже лучше, чем предыдущие ответы. :) |
<body> <script> document.addEventListener('mousemove', onMouseMove) function onMouseMove(){ document.body.innerHTML += 'mousemove<br>'; //document.removeEventListener('mousemove', onMouseMove); } </script> </body> <body> <script> document.addEventListener('mousemove', onMouseMove) function onMouseMove(){ document.body.innerHTML += 'mousemove<br>'; document.removeEventListener('mousemove', onMouseMove); } </script> </body> |
Цитата:
Ну и даже если написать иначе, но в такой последовательности - сработают замыкания. У меня задача была сделать чтобы работало так же в РАЗНЫХ областях видимости. Как вы не можете этого понять то........... |
Попробуйте обернуть
document.addEventListener('mousemove', onMouseMove) в другую ф-ю. и представить, что onMouseMove принадлежит глобальному объекту. var seat = { onMouseMove : function() {}; } Тогда первой идеей будет в каждой ф-ии вызывать function1 () { document.addEventListener('mousemove', seat.onMouseMove); } function2 () { document.removeEventListener('mousemove', seat.onMouseMove); } Попробуйте))) а у меня это не функции к тому же, а методы, т.е. в объектах. Моя задача более сложная, чем ваши простенькие примеры danik.js. Узко мыслите. Из-за вашего ограниченного мышления danik.js мне тут минусов понаставили, однако вы просто не поняли задачу. Не идиотизм разве. |
Цитата:
<body> <script> var seat = { onMouseMove: function() { document.body.innerHTML += 'mousemove<br>'; document.removeEventListener('mousemove', seat.onMouseMove); } } document.addEventListener('mousemove', seat.onMouseMove) </script> </body> И че изменилось? ссылка на обработчик так и осталась ссылкой на обработчик. Цитата:
|
danik.js,
Ну ты упоролся: у него событие вешается не на глобальный document, а на видимый локально block_edit, которого нет в области видимости addSeats. Он конечно тоже упоролся - писать свой обработчик событий не разобравшись с нативным, но с него спросу мало. Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 13:33. |