Удаление прослушивания события
Приветствую, помогите, знающие люди, как решить проблему?
function some(x, y) { console.log(x, y) } // Как передать параметры x,y или организовать функцию? $(window).on ('resize', some); // Что бы потом спокойно удалить этот handler $(window).off('resize', some); Самое простое решение function some(x, y) { console.log(x, y) } // Передаю данные в анонимную функцию $(window).on ('resize', function () { some(x, y) }); // Удаляю все слушатели $(window).off('resize'); Но хотелось бы удалить конкретную функцию |
Patr56,
скорей всего жеквери использует нативные JS-переменные. Попробуйте onresize=null. Если не получиться, используйте вместо $(window).on... onresize=some |
Решение примерно такое получилось, с замыканием
function someGloba() { "use strict"; console.log('someGlobal start'); var x; var y; function getX() { return x; } function getY() { return y; } function setY(value) { y = value; } function setX(value) { x = value; } return { getX: getX, getY: getY, setY: setY, setX: setX }; } var someGlobal = someGloba(); function some(x, y) { console.log(x, y) } function someWrap(event) { some(someGlobal.getX(), someGlobal.getY()) } someGlobal.setX(x); someGlobal.setY(y); $(window).on ('resize', someWrap); $(window).off('resize', someWrap); |
Patr56,
Дело конечно ваше, но Ваше решение не особо гибкое. нет возможности свободно удалять и добавлять обработчики. Я бы на вашем месте сделал как-то так <html> <button onclick="window.onresize()"> test </button> <button onclick="window.handlers.remove(alert1)"> remove </button> <script> Handlers=function(){this.handlers=[]} Handlers.prototype={ remove: function(handler){this.handlers=this.handlers.filter(function(h){return handler!==h})}, add: function(handler){this.handlers.push(handler)}, call: function(){this.handlers.forEach(function(handler){handler()})} } handlers=new Handlers alert1=function(){alert(1)} alert2=function(){alert(2)} handlers.add(alert1) handlers.add(alert2) onresize=function(){handlers.call()} </script> </html> |
Цитата:
|
nerv_,
Спасибо большое, отличное решение :) |
Часовой пояс GMT +3, время: 08:26. |