在添加侦听器后,javascript是否有内置的方法来执行现有事件?

时间:2017-07-11 17:16:42

标签: javascript javascript-events keyboard-events

在javascript中我这样做

window.addEventListener("aaa", event => {
    alert("hddi");
});

window.dispatchEvent(new CustomEvent("aaa", {detail:1}));

哪个有效,但是有一种简约的方法可以调度事件并将它们全部排队,然后附加监听器,让它执行队列中的所有事件(FIFO),就像这样

window.dispatchEvent(new CustomEvent("aaa", {detail:1}));
window.dispatchEvent(new CustomEvent("aaa", {detail:1}));
window.dispatchEvent(new CustomEvent("aaa", {detail:1}));
window.addEventListener("aaa", event => {
    alert("hddi");  // alerts 3 times
});

我希望避免任何库,只是最小化自定义代码。是否有本地方法可以做到这一点?

由于

2 个答案:

答案 0 :(得分:0)

JavaScript 在触发这些事件时立即将事件调度到附加的事件处理程序。我不知道有一系列本地排队的事件,附加一个处理程序,然后让它处理队列。

您正在寻找的是简单队列,以及处理每个项目的处理函数:



var aaa_queue = [];

aaa_queue.push({ detail: 1 });
aaa_queue.push({ detail: 2 });
aaa_queue.push({ detail: 3 });

var aaa_handler = function(obj) {
  console.log(["Now handling:", obj]);
};

var process_queue = function(queue, handler) {
  while(queue.length > 0) {
    handler(queue.shift());   // shift() removes and returns the first item
  }
};

process_queue(aaa_queue, aaa_handler);



     

答案 1 :(得分:-1)

你可以试试这个:

window.addEventListener("aaa", event => {
    alert("hddi");
});
function dispatch(event, params, times) {
    for(var i = 0; i < times; i++) {
        window.dispatchEvent(new CustomEvent(event, params));
    }
}
dispatch("aaa", {detail: 1}, 5);

希望它有所帮助!