繁体   English   中英

javascript更改调用函数的名称

[英]javascript change name of called function

大家好,我是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);
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);

在javascript函数中是一流的,因此您可以从字面上将pincheck分配给另一个这样的变量。

var pinpass2 = pincheck;

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

pinpass(1,2,3,4);

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

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

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

小提琴

我不是100%来自您的问题,但是您似乎正在尝试根据staffid变量调用其他函数。 IE,如果它是2pinpass2()调用pinpass2()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM