大家好我是非常新的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);
答案 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;');
答案 3 :(得分:0)
我不是100%来自您的问题,但看起来您正在尝试根据staffid变量调用不同的函数。 I.E.如果是2
,您要拨打pinpass2()
。
如果这是一个全局函数,你可以调用window[ 'pinpass' + staffid ]()
,它将调用你想要的函数(如果存在)。
示例:如果staffid = 2
,则window[ 'pinpass' + staffid ]()
与window[ 'pinpass2' ]()
等效,与调用pinpass2()
相同。
这是有效的,因为所有全局变量(包括函数)都是window
对象的属性,并且可以使用动态生成的名称和方括号表示法访问属性。