【问题标题】:canjs :not-selector in event triggerscanjs:事件触发器中的非选择器
【发布时间】:2014-09-20 12:30:18
【问题描述】:

我一直被以下情况困扰。

首先我将点击事件处理程序添加到页面的所有元素,这会调用一个小弹出窗口。我无法将弹出窗口与此 *-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');

是否有任何提示可以隔离此问题。除了弹出窗口内的元素之外,所有其他元素都确实需要点击处理程序, 你的 海基

【问题讨论】:

    标签: jquery canjs canjs-control


    【解决方案1】:

    我认为您需要做的是将一个单击事件处理程序附加到正文,并将一个单击事件处理程序附加到 .popup。正文单击处理程序将打开弹出窗口。 .popup click 处理程序将捕获该事件,以便它不会传播到 body 元素。

    var controller = can.Control.extend({
        'click': function ($el, event) {
            /* open popup now */
        },
        '.popup click': function ($el, event) {
            event.stopPropagation();
        }
    });
    

    【讨论】:

    • 我有一个 AHA 时刻。顺序确实很重要。事件是一个队列,浏览器按照代码中给出的顺序在其中爬取所有事件。如果两个处理程序都附加到同一个元素,如果首先执行 Click-handler,然后它通过 .popup click-handler。 event.stopPropagation 没问题,但我认为我需要在处理弹出窗口的同时分离其他处理程序。
    • 事件从目标“冒泡”到其父级。如果单击 .popup,则 .popup 单击处理程序将运行,并且(如果事件没有停止传播)主体单击处理程序将在之后运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多