2012-12-31 40 views
1

我有以下的html:改变事件目标

<div id="div1"> 
    <div id="div2"> 
    </div> 
</div> 

JS:

document.addEventListener('mousedown', function(e){ 
    console.log(e.target); 
}); 

如果鼠标点击DIV2,然后e.target是DIV2。在这种情况下,我希望目标是div1。可能吗?

+0

是的。使用jQuery等支持库也更容易。 –

+5

我不想使用jQuery – karaxuna

+1

您的最终目标是什么?你需要触发'div1'的事件还是以某种方式修改'div1'? –

回答

3

最简单的方法可能是向上走DOM树,直到找到所需的元素。

document.addEventListener('mousedown', function(e) { 

    // start with the element that was clicked. 
    var parent = e.target; 

    // loop while a parent exists, and it's not yet what we are looking for. 
    while (parent && parent.id !== 'div1') { 

     // We didn't find anything yet, so snag the next parent. 
     parent = parent.parentElement; 
    } 

    // When the loop exits, we either found the element we want, 
    // or we ran out of parents. 
    console.log(parent); 
});​ 

例子:http://jsfiddle.net/7kYJn/

+0

感谢Alex,您的回答非常有用 – karaxuna

1

在DOM中,您可以指定附加的事件监听到的元素:

var div1 = document.getElementById('div1'); 
div1.addEventListener('mousedown',function(e){ 
    console.log(e.target); 
}); 
+0

不错的决定,但我有多个div1像div1,这在我的情况是没有用的。非常感谢 – karaxuna

+0

但是,如果需要“现场”风格的活动代表团,这是行不通的。如果您想绑定一个处理程序,然后将十几个'#div1'添加到页面,则无法处理点击。 –