我尝试为两个按钮链接两个JavaScript/jQuery事件。当按下一个按钮时,我希望它等待第二个按钮被单击,然后继续执行。大概是这样的:
$("#button1").on("click", function() {
// wait for button 2 to be clicked
console.log("Hello!");
});
现在,我发现的最好的方法是通过第二个按钮设置一个标志,并进行轮询,直到标志发生变化:
let flag_triggered = false;
$("#button1").on("click", function() {
button_one_click();
});
function button_one_click(){
// wait for button 2 to be clicked
if(flag_triggered == false){
window.setTimeout(button_one_click, 100);
}else{
console.log("Hello!");
flag_triggered = false;
}
}
$("#button2").on("click", function() {
flag_triggered = true;
});
我觉得应该有更可靠的方法来做到这一点。我该如何处理这种情况?
3条答案
按热度按时间7rtdyuoh1#
不需要轮询,你可以点击第二个按钮直接执行你需要执行的代码。至少有两种方法可以做到这一点:
1.让第一个按钮的单击向运行代码的第二个按钮添加一次性单击处理程序。在正常情况下,在事件处理程序中添加事件处理程序通常是问题的标志,但在这种特定情况下,它可能是正确的。
1.在两个按钮上都有处理程序,第一个按钮的单击设置一个标志,第二个按钮的单击查看该标志以确定是否应该运行某些代码。
null
或类似的,则忽略它,但这基本上是上面#1的变体。在这两种情况下,您可以考虑向用户提供一些指示,表明第二个按钮不会做任何事情(例如,通过禁用它),如果事实上它不会做任何事情,直到/除非第一个按钮被单击。
由于您似乎不希望第二个按钮做任何事情,直到第一个按钮被点击,#1似乎很简单。
我应该注意到,jQuery不需要只是做这样简单的事情:
yeotifhr2#
您可以在单击第一个按钮时添加第二个按钮事件侦听器。我还要注意的是,你触发了一个点击事件,而不是监听一个。
prdp8dxp3#
试着这样做
在这段代码中,我们使用button1Clicked标记来跟踪第一个按钮是否被点击。当第一个按钮被点击时,它将button1Clicked设置为true并调用waitForButton2函数。当单击第二个按钮时,它检查button1Clicked是否为true,如果为true,则继续执行所需的代码。
这种方法确保了第二次按钮单击之后的代码仅在第一次按钮在第二次按钮之前单击时执行。如果单击第二个按钮而没有单击第一个按钮,则会提供一条消息指示此情况。