【问题标题】:Detecting a Non-Namespaced Event in jQuery在 jQuery 中检测非命名空间事件
【发布时间】:2017-10-03 05:46:30
【问题描述】:

我正在尝试仅使用 jQuery 的 on 检测未命名空间的事件

我尝试在on 的回调中检查命名空间,如下所示,但始终未定义:

$(".selector").on(
    "click",
    function (e) {
        console.log(e.namespace); // Undefined, not "mynamespace"
    }
);

$(".selector").trigger("click.mynamespace");

我还读到您可以将“.$”附加到事件名称以排除任何命名空间,但这似乎只适用于trigger,而不适用于on。即使事件是命名空间的,以下也会运行:

$(".selector").on(
    "click.$",
    function (e) {
        // runs even when triggered with a namespace
    }
);

我不确定从这里去哪里,因为当我记录事件对象时,找不到名称空间。

提前致谢!

【问题讨论】:

    标签: javascript jquery events namespaces javascript-namespaces


    【解决方案1】:

    尝试通过handleObj访问它。

    HTML:

    <div class="selector">
      BOX
    </div>
    <button onclick="clickWithNamespace()">with ns</button>
    <button onclick="clickWithoutNamespace()">without ns</button>
    

    JS:

    $(".selector").on(
        "click.mynamespace",
        manageClick
    );
    $(".selector").on(
        "click",
        manageClick
    );
    function manageClick(event) {
       console.log(event.handleObj.namespace);
       $(".selector").text(event.handleObj.namespace);
    }
    
    function clickWithNamespace() {
      $(".selector").trigger("click.mynamespace");
    }
    
    
    function clickWithoutNamespace() {
      $(".selector").trigger("click");
    }
    

    https://jsfiddle.net/j52rmxrs/15/

    【讨论】:

    • 感谢您的回答!不幸的是,代码总是说命名空间是“mynamespace”,即使它是在没有命名空间的情况下触发的。这是一个问题,因为目标是检测事件何时被 not 命名空间。换句话说,我需要它来完成您的代码所做的事情,但在on 的第一个参数中没有“.mynamespace”。这有意义吗?
    • 用您想要实现的内容更新了 jsfiddle 链接。明天我也会更新示例中的代码。抱歉,我现在正在打电话,我花了 20 分钟通过电话使用堆栈和 jsfiddle
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 2012-11-21
    • 2011-11-05
    • 2013-06-06
    • 1970-01-01
    • 2019-04-17
    • 2013-03-31
    • 2014-10-28
    相关资源
    最近更新 更多