我在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进行测试,我想断言是否确实创建并初始化了事件。
有没有办法实现这个目标?
答案 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);
};