Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript更改被调用函数的名称_Javascript - Fatal编程技术网

javascript更改被调用函数的名称

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;\"> -

大家好,我是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>
上面的功能应该可以做到这一点,但我似乎无法让它工作。 谢谢你的帮助。 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);