Удаление прослушивания события
Приветствую, помогите, знающие люди, как решить проблему?
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, время: 22:07. |