在 jQuery 中检测非命名空间事件

Detecting a Non-Namespaced Event in jQuery

提问人:Randy 提问时间:5/5/2017 更新时间:5/5/2017 访问量:80

问:

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

我尝试在以下回调中检查命名空间,但它始终未定义:on

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

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

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

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

我不确定从这里去哪里,因为当我记录事件对象时,命名空间无处可寻。

提前致谢!

JavaScript jQuery 事件 命名 JavaScript 命名空间

评论


答:

1赞 quirimmo 5/5/2017 #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/

评论

0赞 Randy 5/5/2017
谢谢你的回答!不幸的是,该代码总是说命名空间是“mynamespace”,即使它是在没有命名空间的情况下触发的。这是一个问题,因为目标是检测事件何时没有命名空间。换句话说,我需要它来执行您的代码所做的事情,但在第一个参数中没有“.mynamespace”。这有意义吗?on
0赞 quirimmo 5/5/2017
更新了 jsfiddle 链接,其中包含您想要实现的目标。明天我也会更新示例中的代码。对不起,我现在通过电话,我花了 20 分钟通过电话使用 stack 和 jsfiddle