检查事件是否已初始化并且没有JQuery的侦听器

时间:2014-07-18 09:26:17

标签: javascript javascript-events

我在S.O.阅读了很多答案。关于寻找事件和事件听众,但没有人适合我。

可能我错过了什么或做错了什么,因为我是JS的新手。

我正在绑定文档上的一些事件,如下所示:

var eventNames = [
    'feedbackGiven',
    'emailEntered',
    'viewedOptin',
    'agreedOptin'
];

var createEvents = function (eventNames){

    for (var i=0; i < eventNames.length; i++){
        // Create and Init the events to their types
        var event = document.createEvent('Event');
        event.initEvent(eventNames[i], true, true);
    }

};

后来我也绑定了一些听众,但暂时保持简短。

现在我想测试我的代码并查看它是否确实创建了事件。我正在使用Qunit进行测试,我想断言是否确实创建并初始化了事件。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

没有问题

您想测试是否创建了事件。但我不认为你理解事件的运作方式。

您正在创建一个Event对象,但没有对它做任何事情。

实际上,除了最后一个事件对象之外的所有事件都在for循环之后不可用(你覆盖了事件var)。

但回到你的“检查或事件被创建”的问题。您无需创建事件即可使用它。

只需将eventListner添加到您想要收听的事件:

document.addEventListener('myCustomEvent', function(e) {
    console.log('The event object: ');
    console.log(e); //the event object
});

然后在您的代码中,我们可以发送一个事件:

var e = new Event('myCustomEvent');
document.dispatchEvent(e);

就是这样。事件对象将传递给addEventListener

附加的所有回调

答案 1 :(得分:-1)

在DOM级别2中,您不能在级别3(尚未支持)中使用将执行此任务的eventListenerList。

实际上你必须为事件采取数组。

您可以构建您的addevent方法:

var events = [];    
var addEvent = function (event, node, fn) {

    var i = 0, len = events.length, nullix = -1;
    while (i != len) {
        if (events[i] == null) {
            if (nullix == -1) nullix = i;
            i++;
            continue;
        }
        if (events[i].event == event &&
            events[i].node == node &&
            events[i].fn == fn) {
            return this;
        }
        i++;
    }

    if (nullix != -1) {
        events[nullix] = {
            event: event,
            node: node,
            fn: fn
        }
    } else {
        events[events.length] = {
            event: event,
            node: node,
            fn: fn
        };
    }
    node.addEventListener(event, fn);

};