我需要向8個對象(手掌)添加一些偵聽器。 這些對象是相同的,但行爲必須根據其位置進行更改。 我有如下(醜陋的)代碼:需要參數的addEventListener(和removeEventListener)函數
root.palmsStatus = ["B","B","B","B","B","B","B","B"];
if (root.palmsStatus[0] !== "N")
root.game.palms.palm1.addEventListener("click", palmHandler = function(){ palmShakeHandler(1); });
if (root.palmsStatus[1] !== "N")
root.game.palms.palm2.addEventListener("click", palmHandler = function(){ palmShakeHandler(2); });
if (root.palmsStatus[2] !== "N")
root.game.palms.palm3.addEventListener("click", function(){ palmShakeHandler(3); });
if (root.palmsStatus[3] !== "N")
root.game.palms.palm4.addEventListener("click", function(){ palmShakeHandler(4); });
if (root.palmsStatus[4] !== "N")
root.game.palms.palm5.addEventListener("click", function(){ palmShakeHandler(5); });
if (root.palmsStatus[5] !== "N")
root.game.palms.palm6.addEventListener("click", function(){ palmShakeHandler(6); });
if (root.palmsStatus[6] !== "N")
root.game.palms.palm7.addEventListener("click", function(){ palmShakeHandler(7); });
if (root.palmsStatus[7] !== "N")
root.game.palms.palm8.addEventListener("click", function(){ palmShakeHandler(8); });
我有兩個要求:
1)不使用的點擊事件的匿名函數。
我寫了這個代碼,但它不工作
root.game.palms.palm8.addEventListener("click", palmShakeHandler(8));
所以這一塊工作正常
root.game.palms.palm8.addEventListener("click", function(){ palmShakeHandler(8); });
但我不知道如何刪除事件偵聽器。 我嘗試此解決方案,但它不工作
root.game.palms.palm8.addEventListener("click", palmHandler = function(){ palmShakeHandler(8); });
root.game.palms.palm8.removeEventListener("click", palmHandler);
2)添加和刪除監聽器在用於循環
我寫了如下代碼,但該行爲是不正確的。加入
for (i=1; i <= root.palmsStatus.length; i++){
if (root.palmsStatus[i-1] !== "N"){
root.game.palms["palm" + i].addEventListener("click", function(){ palmShakeHandler(i); });
}
}
聽衆,但傳遞給palmShakeHandler參數的值總是8.
沒有人能幫助我解決這些問題?
將監聽程序添加到循環中很好。 但刪除它們不起作用 – Zauker
我使用此代碼: root.game.palms [「palm」+ palm] .removeEventListener(「click」,palmShakeHandler); – Zauker
噢,要刪除處理程序,您需要保留對綁定函數的引用並刪除該函數。 'var boundPalm = palm.bind(null,i); addHandler(boundPalm)... removeHandler(boundPalm)' – atomrc