我想创建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
会更好。)