我的网站上有很多单选按钮。每个都有相同的点击处理程序。在处理程序内部,我进行了ajax调用和一些其他的逻辑,这可能需要一些时间。正如我所说的,它是同一个处理程序。当某人单击一个单选按钮时实际发生的情况,因此将执行处理程序中的代码,但是很快他按下另一个单选按钮,则首先单击的单选按钮的处理程序代码不会完全执行。因此,现在再次发生单击单选事件,并且此代码再次开始执行。如何防止在处理程序代码完全执行之前单击另一个单选按钮。
答案 0 :(得分:0)
如果函数在执行期间,则可以使用包含true
的外部变量
var execution=false;
function action(radio) {
console.log('try run');
if(execution) { radio.checked = false; return };
execution=true;
console.log('execution starts: 5s');
setTimeout(()=> {
console.log('execution ends');
execution=false;
},5000)
}
<input type="radio" onclick="action(this)">A
<input type="radio" onclick="action(this)">B
<input type="radio" onclick="action(this)">C