触发自定义jQuery事件而不冒泡

时间:2013-06-03 12:38:14

标签: jquery

我想在对象上触发一个不可冒泡的自定义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做了类似的事情,但只针对第一个匹配的元素。

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

1 个答案:

答案 0 :(得分:15)

你是对的,triggerHandler()仅适用于集合中的第一个元素,但这应该不是问题,因为使用$(this)构建的集合只包含一个元素。

因此,你可以安全地写:

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

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