11

我想在一个对象上触发一个不可冒泡的自定义 jQuery 事件。我知道我们可以使用 return false 或 stopPropagation 来防止冒泡。我想知道的是我可以触发自定义事件并指定默认情况下它不会冒泡。

这是我现在拥有的代码

        $(".abc").on("change", function () {
            var e = new $.Event("datachange");
            $(this).trigger(e)
        });

以上触发了#abc 上的datachange 事件,并将事件一直向上冒泡。我不想那样。我可以通过使用以下方法来实现。

        $(".abc").on("change", function () {
            var e = new $.Event("datachange");
            //e.stopPropagation(); this does not work
            $(this).trigger(e)
        }).on("datachange", function (e) {
            e.stopPropagation();
            return false;
        });

我读到 triggerHandler 做了类似的事情,但只针对第一个匹配元素。

有没有更好的方法来实现这一目标?

4

1 回答 1

17

没错,triggerHandler()仅适用于集合中的第一个元素,但这不应该成为问题,因为您构建的集合$(this)仅包含一个元素。

因此,您可以安全地编写:

$(".abc").on("change", function() {
    $(this).triggerHandler("datachange");
});

这样,datachange事件就不会冒泡文档树。

于 2013-06-03T12:46:43.090 回答