是否可以播放自定义事件?

时间:2016-07-11 07:37:53

标签: javascript dom

我有一个类似下面的设置,其中正文中的所有三个元素都订阅了某个事件(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);以便所有三个处理程序都会启动?

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

确实你必须在每个元素上激活它...我认为你可以编写一个包装器来记住你想要添加一个监听器的元素。然后你需要一个方法来播放事件......你可以在模块中写下所有内容:

&#13;
&#13;
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;
&#13;
&#13;

我没有测试它应该做我认为的工作。您也可以添加删除侦听器的方法,也可以更改一些代码来处理正常事件,例如点击&#39;等...希望它有所帮助

编辑:单身可能更好;)