我遇到了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函数内部
答案 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的顺序)。
通常最好让事件注册尽可能简单。一旦你有一个复杂的系统,你可能需要自己的事件注册和调用系统,以避免各种浏览器的特性(有很多这样的)。
- 罗布