jQuery事件冲突

时间:2016-09-03 23:43:57

标签: javascript jquery

我有一个对象:

var myObject = {
    open : function() {
        console.log('Object open');

        $(this).trigger('open');
    }
};

$(myObject).on('open', function() {
    console.log('Open event received');
});

myObject.open();

此代码会引发过多的递归"。

问题是触发器正在调用方法,如果我重命名open方法,则可以:

var myObject = {
    _open : function() {
        console.log('Object open');

        $(this).trigger('open');
     }
};

$(myObject).on('open', function() {
    console.log('Open event received');
});

 myObject._open();

这对任何人都有意义吗?

3 个答案:

答案 0 :(得分:0)

当你试图触发'打开&#39>时,你创建了一个递归循环。再次,
递归循环是一种一遍又一遍地调用自身的函数,直到" stackoverflow"错误发生(没有双关语)。它是一种更有效的循环方式。
在第二种情况下,您触发_open然后该函数尝试触发“打开”#39; event,触发on(' open')监听器。 就这么简单。

答案 1 :(得分:0)

在你的第一个例子中

$(this).trigger('open');

以递归方式触发myObject.open函数的调用。

在第二个

$(this).trigger('open');

触发新的自定义事件'打开'然后使用通过on()方法定义的处理程序处理此事件。

答案 2 :(得分:0)

所以听起来你试图为你的函数执行时创建一个事件监听器?

如果是这样,我就是如何处理这些类型的事件的。我使用绑定到文档的自定义事件,因此它们可以在全局级别使用。

JS小提琴:https://jsfiddle.net/7eaoe1hp/

    var myObject = {
        open : function() {
            console.log('Object open');

            $(document).triggerHandler('open');
        }
    };

    $(document).on('open', function(){
        console.log('Open event received');
    });

    myObject.open();