2011-01-25 4 views
4

Почему я не могу добавить прослушиватель событий к самому текстовому узлу вместо элемента p?textNode addEventListener

<p>childNode</p> 
... 
p.childNodes[0].addEventListener('click',function(){alert('ok')},false) 

Когда я нажимаю на childNode ничего не происходит в хроме

ответ

6

Текстовые узлы просто не запускают большинство событий: исторически, элементы несут ответственность за выполнение этого в HTML DOM. Тем не менее, текстовые узлы блокируют некоторые события (кроме IE < = 8): DOM mutation events. Особенно полезным для текстовых узлов является DOMCharacterDataModified, который используется для обнаружения изменения текста текстового узла и может быть полезен в браузерах.

Пример: http://www.jsfiddle.net/timdown/c6dHX/

HTML:

<div contenteditable="true" id="div">A text node, edit me</div> 

JavaScript:

var textNode = document.getElementById("div").firstChild; 

textNode.addEventListener("DOMCharacterDataModified", function(evt) { 
    alert("Text changed from '" + evt.prevValue + "' to '" + evt.newValue + "'"); 
}, false); 
4

Текстовые узлы просто «узел» экземпляры, и в соответствии с DOM спецификации, они просто не могут иметь слушателей событий. Это не то, что нарушало бы естественное право, но это не так, как работает DOM.