canjs :not-selector в триггерах событий

Я застрял в следующей ситуации.

Во-первых, я добавляю обработчик события клика ко всем элементам страницы, который вызывает небольшое всплывающее окно. Я не могу изолировать всплывающее окно от этого *-селектора, поэтому он открывает всплывающее окно во всплывающем окне и так далее.

Я пробовал следующее:

var controller = can.Control.extend({
    '*:not(.popup *) click': function(el, event) { //This does not work
        $(el).openPopUp() 
        //pseudo code, opens the popup in to <div class"popup"><input /><input /></div>
    },
});
var c = new controller('body');

Есть ли какие-либо подсказки для изоляции этой проблемы. Обработчик кликов действительно необходим для всех остальных элементов, помимо элементов внутри всплывающего окна. С уважением, Хейкки.


person Heikki Mustonen    schedule 20.09.2014    source источник


Ответы (1)


Я думаю, что вам нужно будет прикрепить один обработчик события клика к телу и один обработчик события клика к .popup. Обработчик щелчка по телу откроет всплывающее окно. Обработчик кликов .popup захватит событие, чтобы оно не передавалось элементу body.

var controller = can.Control.extend({
    'click': function ($el, event) {
        /* open popup now */
    },
    '.popup click': function ($el, event) {
        event.stopPropagation();
    }
});
person 76484    schedule 20.09.2014
comment
У меня AHA-момент. Порядок имеет значение. Событие — это очередь, в которой браузер просматривает все события в порядке, указанном в коде. Если оба обработчика прикреплены к одному и тому же элементу, сначала выполняется обработчик кликов, а после этого он проходит через обработчик кликов .popup. event.stopPropagation в порядке, но я думаю, что мне нужно отключить другие обработчики, пока я работаю с всплывающим окном. - person Heikki Mustonen; 23.09.2014
comment
Событие всплывает от цели к своим родителям. Если щелкнуть .popup, запустится обработчик щелчка .popup и (если распространение события не остановлено) после этого запустится обработчик щелчка тела. - person 76484; 24.09.2014