2

大家好,我对 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;
};
}

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

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

4 回答 4

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);
于 2013-08-09T00:02:26.523 回答
0

在 javascript 中,函数是一流的,所以你可以pincheck像这样分配给另一个变量。

var pinpass2 = pincheck;

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

pinpass(1,2,3,4);

于 2013-08-08T23:57:06.393 回答
0

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

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

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

小提琴

于 2013-08-08T23:59:01.227 回答
0

我不是 100% 同意你的问题,但看起来你正试图根据 Staffid 变量调用不同的函数。IE如果是2你想调用pinpass2()的。

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

示例:如果staffid = 2thenwindow[ 'pinpass' + staffid ]()等价于window[ 'pinpass2' ]()which 与 call 相同pinpass2()

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

于 2013-08-09T00:06:01.433 回答