Javascript 将当前目标名称传递给函数

Javascript 将当前目标名称传递给函数,javascript,createjs,Javascript,Createjs,我想为多个按钮动态创建事件监听器,然后根据单击的按钮显示特定的帧标签,但我不确定要传递什么(仅供参考,这将用于Flash CC中的HTML5画布,但基本上相同应适用于显示div等的网页)。我目前有: var butTotal = 4; var selfHome = this; function createListeners () { for (var i=0; i<butTotal; i++) { selfHome["btn" + i].addEventList

我想为多个按钮动态创建事件监听器,然后根据单击的按钮显示特定的帧标签,但我不确定要传递什么(仅供参考,这将用于Flash CC中的HTML5画布,但基本上相同应适用于显示div等的网页)。我目前有:

var butTotal = 4;
var selfHome = this;

function createListeners () {
    for (var i=0; i<butTotal; i++) {
        selfHome["btn" + i].addEventListener('click', openPop);
    }
}

function openPop () {
    alert("test");
    selfHome.gotoAndPlay("pop"+event.currentTarget.name.substr(3));
}

createListeners();
var butttol=4;
var selfHome=this;
函数createListeners(){

对于(var i=0;i,基于您拥有的代码,我只需更改
.addEventListener()
,以调用通用函数(而不是直接调用
openPop
),并将引用传递给按钮。因此:

selfHome["btn" + i].addEventListener('click', openPop);
…将变成这样:

selfHome["btn" + i].addEventListener('click', function() {
    openPop(this);
});
此时,您必须更新
openPop
,以接受一个参数作为对触发它的元素的引用…类似于:

function openPop (currentButton) {

此时,您可以使用
openPop
逻辑中的
currentButton
引用单击的按钮。

我不确定我是否完全理解您的问题。但是如果您只需要传递按钮实例(在您的情况下是“selfHome[“btn”+I]”)您可以在事件处理程序中调用一个匿名函数,该函数将按钮实例作为一个片段调用openPop()

var butTotal = 4;
var selfHome = this;

function createListeners () {
    for (var i=0; i<butTotal; i++) {
         var currentBtn = selfHome["btn" + i];
        currentBtn.addEventListener('click', function(){openPop(currentBtn);} );

    }
}

function openPop (btn) {
    alert("test");
    selfHome.gotoAndPlay(/*use button instance 'btn' to find frame*/);    
}
createListeners();
var butttol=4;
var selfHome=this;
函数createListeners(){

对于(var i=0;i当事件被触发时,处理函数中的
this
关键字被设置为触发事件的元素。如果按钮有需要检索的数据,只需从
this
关键字获取:

function openPop (btn) {
    alert(this.name);
    /* ... */
}

看起来您希望它包含函数gotoAndPlay()以及btn元素(其中包含一个ID(btn[number])和一个在
substr(3)
处带有特殊内容的名称)(我假设与ID相同)。如果这些都是真的,它应该在chrome中工作……在其他浏览器中,您需要将
事件
添加到
openPop()
方法签名中

function openPop (event) {
    alert("test");
    selfHome.gotoAndPlay("pop"+event.currentTarget.name.substr(3));
}
我相信这就是您正在寻找的,并补充说一个词应该可以解决您的问题(假设您的dom和
selfHome
包含的内容):

您还可以从
openPop()
中省去
事件
,并将
event.currentTarget
替换为
this

function openPop () {
    alert("test");
    selfHome.gotoAndPlay("pop"+this.name.substr(3));
}

事件将自动传递,currentTarget可以从事件中获得。这一定是另一个问题,请参见我的评论。实际上,我只是想用您刚刚在OP中发布的第二条评论来回应……您的方法也可以,但前提是您在
openPop 。任何一种方法都可以。我明白了,匿名函数是不必要的……但我想它也会工作。这里有一把小提琴给你:()。我的第一个假设(仍然很好奇)是,
selfHome
并没有包含OP认为的所有功能。谢谢……我无法从工作中访问JSFIDLE。:)我喜欢匿名函数方法的主要原因是,它允许更容易地将其他参数传递到函数中。
事件
方法依赖于不存在任何其他变量,这会稍微降低灵活性。也许就是这样,
事件
在Chrome中会自动,但在Fire中会自动fox(其他人?)您必须将其添加到openPop中,如下面的
openPop(event)
,请参见:这实际上会显示每个按钮都是最后一个按钮。因为
currentBtn
将更新到循环中的最后一个按钮。然后当它实际被调用时(无论按下哪个按钮)它将传递最后一个的值。传递
将修复它: