如何检查事件触发的元素?

时间:2012-05-18 07:50:47

标签: javascript html

addLBEvent : function()
    {
        var amount = this.imageList.length;
        for(var i = 0;i < amount;i++)
        {
            if(this.imageList[i].addEventListener)
            {
                this.imageList[i].addEventListener("click",this.startLB,false);
            }
            /* 
                IE<9-part
            */
        }
    },

startLB : function(src)
    {


    }

我想知道哪个元素触发了事件。 如果我在HTML代码中执行此操作,我会编写类似onlick="startLB(this.src)"的内容。我怎么能用addEventListener做这样的事情? 我已经尝试过`addEventListener(“click”,“myobjectname.startLB(this.src)”但它没有用。

抱歉我的英语不好

6 个答案:

答案 0 :(得分:4)

事件object作为任何事件处理程序的第一个参数传入。

事件对象为target属性,用于标识事件适用的元素。

addLBEvent : function(event) {
    console.log(event.target);
}

https://developer.mozilla.org/en/DOM/event.target

答案 1 :(得分:2)

您可以访问对触发事件的元素的引用...

var elementThatTriggeredEvent = e.target || e.srcElement;

...假设e是对事件的引用。

答案 2 :(得分:0)

如果您想知道点击了哪个元素,请使用event.target

如果您想知道您拥有处理程序的元素,请使用thisaddEventListener将调用您的处理程序,并将this设置为您调用addEventListener的元素。

注意区别。例如,如果你有这个标记:

<div id="foo"><span id="bar">Hi there</span></div>

...而且这段代码:

document.getElementById("foo").addEventListener('click', function(event) {
    alert(this.id);
    alert(event.target.id)
}, false);

...然后,如果用户点击“你好”,this将是divevent.target将是span

Live example | source

了解this是如何挂钩事件的元素,event.target是它触发的元素(然后它会冒泡到div)。


请注意,旧版IE不提供addEventListener;你必须使用attachEvent代替。 attachEvent 确保将this设置为您挂接它的元素,因此请注意API之间的差异。为了解决这样的问题,您可以选择任何体面的库,例如jQueryYUIClosureany of several others

答案 3 :(得分:0)

我认为你最好这样绑定它:

var that = this;
this.imageList[i].addEventListener("click",function() {
    that.startLB(this.src);
},false);

this将成为事件目标,因此我们必须以某种方式访问​​该对象,我将其命名为that

答案 4 :(得分:0)

使用此:

startLB : function(src)
    {
       var element = src.target.tagName;
       alert("element >> "+element);
    }   

答案 5 :(得分:0)

试试这个......

addLBEvent : function(e)
{
    if (!e) e = event;
    e = e.srcElement || e.target;
    .......
}