@Pablo Fernandezはオーダーについてはhis answerですが、もう1つの要素は要素がDOM内にある必要があるということです。
イベントをバブリングイベントにし、ハンドラをdocument
にアタッチしているためです。イベントがdocument
にバブルするには、バブリングする要素が、、document
の範囲内にある必要があります。
例:http://jsfiddle.net/nhsN4/
window.onload = function(){
var element = document.createElement('div');
// add element to the DOM
document.body.appendChild(element);
var evt = document.createEvent("HTMLEvents");
evt.initEvent("myClick", true, false);
// add listener to the document
document.addEventListener("myClick", function(){
alert("myClick event caught");
alert(event.type);
}, false);
// dispatch the event on the element, and it bubbles up to the document
element.dispatchEvent(evt);
};
あなたが作成したelement
に直接ハンドラを追加した場合、あなたはそれがdocument
にせずにイベントを送出できます。
例:http://jsfiddle.net/nhsN4/1/
window.onload = function(){
var element = document.createElement('div');
var evt = document.createEvent("HTMLEvents");
evt.initEvent("myClick", true, false);
// add listener to the element
element.addEventListener("myClick", function(){
alert("myClick event caught");
alert(event.type);
}, false);
element.dispatchEvent(evt);
};