`event.target`是否保证在JavaScript中的“click”等事件回调中是/ this等的后代?

时间:2013-06-05 06:24:56

标签: javascript dom javascript-events

如果我通过.parentNode的{​​{1}}递送,我保证会event.target吗?这是在规范中的任何地方提到的吗?

这里有一些代码可以证明这一点,如果thisevent.target的后代

,则会记录

http://jsfiddle.net/Dogbert/aRLrG/

this

HTML

var isADescendentOf = function (child, parent) {
    if (child === parent) {
        return true;
    }
    if (child === null) {
        return false;
    }
    return isADescendentOf(child.parentNode, parent);
};


var nodes = document.querySelectorAll("*");

for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener("click", function (event) {
        console.log(isADescendentOf(event.target, this));
    });
}

1 个答案:

答案 0 :(得分:4)

  

将事件调度到其目标EventTarget,并且发现触发的任何事件侦听器。然后,冒泡事件将触发通过跟随 EventTarget的父链向上找到的任何其他事件侦听器,检查在每个连续EventTarget上注册的任何事件侦听器。这种向上传播将继续包括Document

     

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-bubbling

请注意,还有非focus等非冒泡事件,因此event.target == this