Javascript 为什么addEventListener会触发事件
addNode_按钮单击事件处理程序正在等待输入以执行某些操作。 但我想通过按esc停止事件侦听器。 我做了一个简化的例子,显示了在keydown中addEventListener会触发“点击”按钮。 我不明白为什么Javascript 为什么addEventListener会触发事件,javascript,addeventlistener,removeeventlistener,Javascript,Addeventlistener,Removeeventlistener,addNode_按钮单击事件处理程序正在等待输入以执行某些操作。 但我想通过按esc停止事件侦听器。 我做了一个简化的例子,显示了在keydown中addEventListener会触发“点击”按钮。 我不明白为什么 addNode\u但是.addEventListener('click',addNodeButtclick); 函数addNodeButClick(){ 让value=nodePt_输入值;out1.value=new Date(); 让waitingValue='尝试通过转义停
addNode\u但是.addEventListener('click',addNodeButtclick);
函数addNodeButClick(){
让value=nodePt_输入值;out1.value=new Date();
让waitingValue='尝试通过转义停止时钟,然后输入要停止的内容';
函数callMeAgain(){addNode_but.dispatchEvent(新事件('click'))};
开关(值){
案例“”:nodePt_inp.value=waitingValue;
case waitingValue:setTimeout(callMeAgain,100);break;
默认值:out1.value=“仅现在我已停止”;
}
}
文件。addEventListener('keydown',escape);
函数转义(evt){
if(evt.key=='Escape'){
addNode_但是.removeEventListener('click',addNodeButClick);
nodePt_inp.value=“”;
addNode_但是.addEventListener('click',addNodeButClick);
}
}
单击我并尝试按esc停止
输出
为了停止设置超时
调用,您应该保持对该调用结果的引用,并调用清除超时
addNode\u但是.addEventListener('click',addNodeButtclick);
var-timerId=null;
函数addNodeButClick(){
让value=nodePt_输入值;out1.value=new Date();
让waitingValue='尝试通过转义停止时钟,然后输入要停止的内容';
函数callMeAgain(){addNode_but.dispatchEvent(新事件('click'))};
nodePt_inp.value=等待值;
timerId=setTimeout(callMeAgain,100);
}
文件。addEventListener('keydown',escape);
函数转义(evt){
if(evt.key=='Escape'){
清除超时(timerId);
}
}
单击我并尝试按esc停止
输出
为了停止设置超时
调用,您应该保持对该调用结果的引用,并调用清除超时
addNode\u但是.addEventListener('click',addNodeButtclick);
var-timerId=null;
函数addNodeButClick(){
让value=nodePt_输入值;out1.value=new Date();
让waitingValue='尝试通过转义停止时钟,然后输入要停止的内容';
函数callMeAgain(){addNode_but.dispatchEvent(新事件('click'))};
nodePt_inp.value=等待值;
timerId=setTimeout(callMeAgain,100);
}
文件。addEventListener('keydown',escape);
函数转义(evt){
if(evt.key=='Escape'){
清除超时(timerId);
}
}
单击我并尝试按esc停止
输出
您的问题完全不清楚。您的代码完全按照您的编程方式执行!如果你解释一下你想要实现什么(而不是你认为你是如何实现的),我们可能可以帮助我尝试通过按来停止eventListener(它在循环中)esc@muratgu必须错过中断,该代码没有问题逻辑错误。它不会停止,直到你进入的东西。否则它只会每隔100毫秒呼叫一次。你的问题完全不清楚。您的代码完全按照您的编程方式执行!如果你解释一下你想要实现什么(而不是你认为你是如何实现的),我们可能可以帮助我尝试通过按来停止eventListener(它在循环中)esc@muratgu必须错过中断,该代码没有问题逻辑错误。它不会停止,直到你进入的东西。否则它只会每隔100ms调用一次。非常感谢,我不认为setTimeout“挂起”EventListener您从哪里获得了有关setTimeout和删除事件侦听器的信息?:@IgorFomenko我不明白这些问题中的任何一个-没有挂起,setTimeout没有事件侦听器!但很高兴这对您有所帮助。非常感谢,我不认为setTimeout“挂起”事件监听器您从哪里获得有关setTimeout和删除事件监听器的信息?:@IgorFomenko我不理解这些问题中的任何一个-没有挂起,setTimeout没有事件监听器!但很高兴这对你有帮助。