我需要向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