Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2015, 15:08
Интересующийся
Отправить личное сообщение для Patr56 Посмотреть профиль Найти все сообщения от Patr56
 
Регистрация: 27.07.2014
Сообщений: 10

Удаление прослушивания события
Приветствую, помогите, знающие люди, как решить проблему?
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, 14.07.2015 в 15:16.
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2015, 15:26
Аспирант
Отправить личное сообщение для jackdempsey2015 Посмотреть профиль Найти все сообщения от jackdempsey2015
 
Регистрация: 23.06.2015
Сообщений: 53

Patr56,
скорей всего жеквери использует нативные JS-переменные. Попробуйте onresize=null. Если не получиться, используйте вместо $(window).on... onresize=some
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2015, 15:41
Интересующийся
Отправить личное сообщение для Patr56 Посмотреть профиль Найти все сообщения от Patr56
 
Регистрация: 27.07.2014
Сообщений: 10

Решение примерно такое получилось, с замыканием
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);
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2015, 15:57
Аспирант
Отправить личное сообщение для jackdempsey2015 Посмотреть профиль Найти все сообщения от jackdempsey2015
 
Регистрация: 23.06.2015
Сообщений: 53

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>
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2015, 16:10
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Patr56
Как передать параметры x,y
очевидно, почитать документацию
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2015, 16:57
Интересующийся
Отправить личное сообщение для Patr56 Посмотреть профиль Найти все сообщения от Patr56
 
Регистрация: 27.07.2014
Сообщений: 10

nerv_,
Спасибо большое, отличное решение
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление обработчика события FanAizu Общие вопросы Javascript 3 23.08.2013 18:46
Назначение и удаление события (addEvent) beejuice Общие вопросы Javascript 3 05.08.2013 14:01
Удаление события mousemove DesiresDesigner Events/DOM/Window 5 13.05.2012 21:08
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Удаление обработчика события belkir Events/DOM/Window 8 22.09.2011 12:47