1
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)" 但它没有用。

对不起我的英语不好

4

6 回答 6

4

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

事件对象作为target标识事件应用到的元素的属性。

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

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

于 2012-05-18T07:53:27.300 回答
2

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

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

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

于 2012-05-18T07:53:15.637 回答
0

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

如果您想知道处理程序在哪个元素上,请使用event.currentTarget或在大多数情况下使用this. addEventListener将调用您的处理程序,并将其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.

实例| 来源

看看this你钩住事件event.target的元素是如何触发的(然后它会冒泡到div)。


请注意,addEventListener旧版本的 IE 上不可用;你必须attachEvent改用。attachEvent 不能确保将this其设置为您挂钩它的元素,因此请注意 API 之间的差异。为了使这样的事情顺利进行,您可能会寻找任何体面的库,如jQueryYUIClosure其他几个库中的任何一个。

于 2012-05-18T07:56:35.697 回答
0

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

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

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

于 2012-05-18T07:58:18.020 回答
0

用这个:

startLB : function(src)
    {
       var element = src.target.tagName;
       alert("element >> "+element);
    }   
于 2012-05-18T08:00:05.317 回答
0

试试这个...

addLBEvent : function(e)
{
    if (!e) e = event;
    e = e.srcElement || e.target;
    .......
}
于 2012-05-18T08:01:06.187 回答