簡體   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