我有一个类似下面的设置,其中正文中的所有三个元素都订阅了某个事件(relevant code pen):
CustomEvent

CustomEvent

据我所知,CREATE TABLE TestData ( id1 int, id2 int, id3 int, id4 varchar (65355)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ stored as textfile;
起泡并且没有涓滴,这可能就是我所需要的。是否有可能发送callback(data, JSON.parse(xhr.responseText).data.link);
以便所有三个处理程序都会启动?
答案 0 :(得分:1)
您需要分别在三个元素中的每个元素上触发它。如你所说,路径是从 up 层次结构到根目录;甚至捕捉阶段(我们大部分时间都不再使用)只会下降到目标元素而不再进一步。
答案 1 :(得分:1)
您必须在三个元素中分别触发事件。但是,您可以在addEventListener()
上使用document.body
,以便在调用document.body.dispatchEvent(new CustomEvent('ding'));
时为每个元素触发这些事件。
示例:
var div = document.querySelector('div');
var span = document.querySelector('span');
var button = document.querySelector('button');
div.addEventListener('ding', function() {
console.log('click');
});
span.addEventListener('ding', function() {
console.log('clack');
});
button.addEventListener('ding', function() {
console.log('bang');
});
document.body.addEventListener('ding', function() {
div.dispatchEvent(new CustomEvent('ding'));
span.dispatchEvent(new CustomEvent('ding'));
button.dispatchEvent(new CustomEvent('ding'));
});
document.body.dispatchEvent(new CustomEvent('ding'));

<body>
<div></div>
<span></span>
<button></button>
</body>
&#13;
答案 2 :(得分:0)
确实你必须在每个元素上激活它...我认为你可以编写一个包装器来记住你想要添加一个监听器的元素。然后你需要一个方法来播放事件......你可以在模块中写下所有内容:
var EventManager = (function(){
var events = {};
return {
addEventListener : function (element, eventId, callback){
// check if you already have this event
if (!events[eventId])
events[eventId] = [];
// add the listener
element.addEventListener(eventId, callback);
// remember the element
events[eventId].push(element);
},
dispatch: function(eventId){
if (!events[eventId])
return;
// get every element where you want to dispatch the event
events[eventId].forEach(function(element){
element.dispatchEvent(new CustomEvent(eventId));
})
}
}
})()
&#13;
我没有测试它应该做我认为的工作。您也可以添加删除侦听器的方法,也可以更改一些代码来处理正常事件,例如点击&#39;等...希望它有所帮助
编辑:单身可能更好;)