我想创建javascript函数,将事件侦听器添加到div,以便在单击div时运行一个函数,并确保div只能被单击一次。我的函数现在看起来像这样:

function clickOnce(divID,func){
  var args = Array.prototype.slice.call(arguments,2);
  functionToRun=partial(func,args);
  thisDiv=document.getElementById(divID);
  thisDiv.addEventListener("click",function(e){
    e.target.removeEventListener(e.type, arguments.callee);
    functionToRun();
  });
}


我在jsfiddle中有一个工作示例:https://jsfiddle.net/qtzLhgr4/1/
 在JSfiddle中,当我单击按钮1时显示“按钮#2已单击”。

最佳答案

您没有声明functionToRun,因此它是隐式全局的。声明并thisDiv

var functionToRun=partial(func,args);
var thisDiv=document.getElementById(divID);


然后开始在strict mode中工作,这将防止此类问题并阻止您使用arguments.callee,这是错误的处理方式:

thisDiv.addEventListener("click", function listener(e) {
    thisDiv.removeEventListener("click", listener);
    functionToRun();
});


e.target也不正确; this会更好。)

09-19 03:45