jQuery - зарегистрировать/отменить регистрацию слушателя для документа элемента

Я попытаюсь объяснить свою проблему. Я использую прослушиватель событий mouseup, поэтому я могу проверять всякий раз, когда выполняется щелчок, а цель не является желаемым элементом. Это код, который я использую:

function clickOutListener(element, callbackFunction){

    $(document).mouseup(function(e){

        if(!$(element).is(e.target) && $(element).has(e.target).length === 0) callbackFunction.call(this, null);

    });
}

Как видите, прослушиватель событий привязан к глобальному элементу документа, и способ отвязать его будет таким:

$(document).off("mouseup");

Вот то, чего мне нужно достичь. Если я отвяжу прослушиватель mouseup, это повлияет на другие элементы, использующие этот прослушиватель (выпадающие списки и другие функции). Я должен предположить, что каждый раз, когда я регистрирую слушателя, он не переопределяет предыдущий определенный слушатель, а добавляет определенную целевую функцию.

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

$(document).mouseup(funct1);
$(document).mouseup(funct2);
$(document).mouseup(funct3);

Как бы вы отменили регистрацию зарегистрированного слушателя только для «funct2»?

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


person ProtectedVoid    schedule 13.12.2016    source источник
comment
Увидев, что вы используете jQuery, взгляните на пространство имен событий, это может помочь ► api.jquery.com/ event.namespace   -  person Nope    schedule 13.12.2016


Ответы (1)


Вы можете использовать пространство имен для своих событий при использовании синтаксиса .on().

$(document).on('mouseup.myNamespace', function(e){ ... }

Это позволяет вам удалять события по пространству имен, оставляя другие на месте.

$(document).off('mouseup.myNamespace');
person Turnip    schedule 13.12.2016