JavaScript事件和“srcElement”

时间:2011-02-28 02:10:58

标签: javascript events onclick

我遇到了JS事件“onclick”的特定问题以及它在一个非常具体的情况下是如何工作的。我有一组嵌套的DIV,看起来像这样(有点):

在代码中:

<div id="A" ...> 
    <div id="B" ...> </div> 
    <div id="C" ...> </div> 
</div>

DIV的确切位置是任意的,只要知道有嵌套的DIV。

DIV A附有onclick事件。

当用户点击div时,我打算将srcElement毫无例外地作为div A. 或许我只是没有使用正确的财产。

基本上我希望能够获得调用onclick事件的div的名称。 从onclick函数内部

3 个答案:

答案 0 :(得分:1)

好吧,div在HTML4中本身没有名称。不过,他们可以拥有一个头衔。在没有框架的JS中,您可以通过这种方式获得标题:

document.getElementById("A").onclick = function() {
    alert(this.title);
}

这似乎在我的测试中运作良好。

答案 1 :(得分:1)

如果onclick位于A,则处理程序中的this将代表该元素。

document.getElementById('A').onclick = function() {
    // "this" is the A element
    alert( this.id );  // alert the ID attribute of the element
};

答案 2 :(得分:0)

如果您将侦听器作为元素的属性附加,则可以使用Patrick的解决方案。

如果使用IE的attachEvent方法,它将无法工作,因为它在调用时不会将侦听器的this关键字设置为该元素。有很多工作要做。 IE 9引入了addEventListener,希望每个其他浏览器都设置this关键字。

Event.srcElement是W3C Event.target属性的IE等价物,是最初发生事件的元素。对于冒泡事件,要查找其处理程序称为侦听器的元素,最好在调用中设置侦听器的this关键字,以便可以将关联的元素称为“this”。

另请注意,使用attachEvent或addEventListener附加时,将调用侦听器的顺序不一致(HTML5尝试修复它,但它尚未广泛实现,并且无论如何都不会修复attachEvent的顺序)。

通常最好让事件注册尽可能简单。一旦你有一个复杂的系统,你可能需要自己的事件注册和调用系统,以避免各种浏览器的特性(有很多这样的)。

- 罗布