javascript更改被调用函数的名称
大家好,我是javascript新手,所以请温柔一点。 我把php和我的调用混合在一起,我有一个小问题。 我需要更改onclick事件中调用的函数名javascript更改被调用函数的名称,javascript,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;\"> -
<div class=\"span4\" id=\"pass\">
<button class=\"btn btn-block btn-large btn-warning\" id=\"bypass\" disabled onclick=\"pass(); return false;\">
-
</button>
</div>
上面的功能应该可以做到这一点,但我似乎无法让它工作。
谢谢你的帮助。
p、 s如果我在pincheck函数中包含以下内容,则会显示所需的标记
alert(\"staff id\"+staffid);
在javascript中,函数是第一类的,所以您可以直接将
pincheck
赋值给另一个类似这样的变量
var pinpass2=pincheck代码>
现在你仍然可以这样称呼它
pinpass(1,2,3,4)代码>您可以像更改任何属性一样更改onclick属性吗
var elem = document.getElementById('bypass');
elem.setAttribute('onclick', 'pinpass' + staffid + '(); return false;');
那应该行得通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);
我不是100%同意你的问题,但看起来你是在尝试调用一个基于staffid变量的不同函数。也就是说,如果它是2
您想调用pinpass2()
如果这是一个全局函数,您可以调用窗口['pinpass'+staffid]()
,它将调用您想要的函数(如果存在)
示例:如果staffid=2
则window['pinpass'+staffid]()
与window['pinpass2']()
等价,这与调用pinpass2()
相同
这是因为所有全局变量(包括函数)都是窗口
对象的属性,可以使用动态生成的名称和方括号表示法访问属性。谢谢,但请解释如何将变量添加到末尾。i、 e var pinpass+staffid=pincheck@user1927512您混淆了哪一部分about@user1927512:它将是window.pass=window[“pinpass”+staffid]代码>在你的情况下。@Bergi既然你已经解决了他的问题,你介意我把它放在我的回答中吗抱歉,我还是新的,但你的例子似乎是在pinpass函数调用中添加了一个变量,而不是将pinpass()改成pinpass1()或pinpass2()等。我不确定这是否与问题有关,但为什么你有这个问题;在倒数第二行末尾的}之后?充其量,这是没有必要的。这个问题的答案很好,但我想知道为什么你有单独的pinpass1、pinpass2等函数,它们是否可能包含大量的重复。。。难道不可能生成一个以staffid
为参数的单一函数pinpass(id)吗?顺便说一句,设置staffid=id
在这个函数中没有任何作用;您可以只参考id
.hmm这似乎很有可能,但给出了一个错误,例如赋值中的左手边无效。@user1927512-修复了这个问题,我将重点放在onclick属性上。非常感谢。对于所有其他建议帮助的人,我认为我的解释很糟糕,因为我应该提到我的调用是动态的,因此需要根据以前的交互更改值。
document.getElementById('bypass').addEventListener('click', pinpass2, false);
document.getElementById('bypass').removeEventListener('click', pinpass2, false);