javascript更改被调用函数的名称

时间:2013-08-08 23:53:27

标签: javascript

大家好我是非常新的javascript所以请温柔。 我把PHP与我的电话混合,我有一个小问题。 我需要更改onclick事件中调用的函数名称。

<div class=\"span4\" id=\"pass\">
    <button class=\"btn btn-block btn-large btn-warning\" id=\"bypass\" disabled onclick=\"pass(); return false;\">
        - 
    </button>
</div>

上面是带std调用的div。 在此之前,一些变量是从另一个函数调用设置的,我需要将上面的调用更改为“pinpass2()或pinpass3等。

function pincheck(id,type,lastid,pin){
    document.getElementById('fade').style.display=\"block\";
    document.getElementById('calc').style.display=\"block\";  
    var staffid = id;
    document.getElementById('bypass').onclick = function (){\"pinpass\"+staffid(); 
    return false;
};
}

以上是应该做的功能,但我似乎无法让它工作。 任何帮助赞赏。 如果我在pincheck函数中包含以下内容,则显示所需的staffid

alert(\"staff id\"+staffid);

4 个答案:

答案 0 :(得分:1)

document.getElementById('bypass').onclick = pinpass2;

这应该工作得很好。 pinpass2已经是一个函数,你可以像任何其他对象一样将它分配给onclick(是的,函数是Javascript中的对象)。所以只需在需要时更改onclick

如果您无法检测到staffid()结果的更改,则应使用切换。

document.getElementById('bypass').onclick = function() {
    switch(staffid()) {
        case 1: pinpass(); break;
        case 2: pinpass2(); break;
        default: pinpass3(); break;
    }
};

虽然大多数时候你不必这样做。另外,我不确定staffid是否应该是一个函数或变量,但它不会改变任何东西。

顺便说一下,这种附加处理程序的方式已经很老了。有一个更强大的:

document.getElementById('bypass').addEventListener('click', pinpass2, false);

这样你可以附加多个功能。删除一个:

document.getElementById('bypass').removeEventListener('click', pinpass2, false);

答案 1 :(得分:0)

在javascript函数中是第一类的,所以你可以将pincheck真正地分配给另一个这样的变量。

var pinpass2 = pincheck;

现在你仍然可以这样称呼它

pinpass(1,2,3,4);

答案 2 :(得分:0)

您可以像更改任何属性一样更改onclick属性吗?

var elem = document.getElementById('bypass');

elem.setAttribute('onclick', 'pinpass' + staffid + '(); return false;');

FIDDLE

答案 3 :(得分:0)

我不是100%来自您的问题,但看起来您正在尝试根据staffid变量调用不同的函数。 I.E.如果是2,您要拨打pinpass2()

如果这是一个全局函数,你可以调用window[ 'pinpass' + staffid ](),它将调用你想要的函数(如果存在)。

示例:如果staffid = 2,则window[ 'pinpass' + staffid ]()window[ 'pinpass2' ]()等效,与调用pinpass2()相同。

这是有效的,因为所有全局变量(包括函数)都是window对象的属性,并且可以使用动态生成的名称和方括号表示法访问属性。