如何避免在 change 和 click 之间触发 false function

How to avoid triggering false function between change and click

我有一个input和一个清晰的button。如果用户在输入字段中键入内容并将其模糊,change() 将被触发并执行某些操作。但是如果我想点击清除button并触发click()change()仍然会被触发。我该如何解决?

我试过了,但没用。 var clear 永远不会是真的。

$("#inputid").change(function() {
  var clear = false;
   $("#clearbtn").click(function() {
     // if clear button is clicked, do something
     clear = true;
   });
   if (clear) {
     return;
   }

   // if clear button is not clicked, do something else
...


您应该将 click 事件移到 change 事件之外。

$("#clearbtn").click(function() {
  // if clear button is clicked, do something
  $("#inputid").val("");
});

这很棘手
问题是 onchange 事件在 clear button click 事件被调用之前被调用
为了克服这个问题,您可以在 onchange 事件中引入一个计时器,以便它等待用户的立即操作
像这样:

$(document).ready(function(){
  var clear = false;
  var isTimerOn = false;
  function HandleChange(){
    if(clear){
     // if clear button is clicked, do something
     $("#inputid").val("");
    }else{
     // if clear button is not clicked, do something else
     alert("do something else");
    }
    clear = false;
    isTimerOn = false;
  }
  
    $("#inputid").change(function() {
    isTimerOn = true;
    setTimeout(HandleChange, 80);
  });
   
   $("#clearbtn").click(function() {
     clear = true;
     if(!isTimerOn){
        HandleChange();
     }
   });
});

这里是 fiddle:https://jsfiddle.net/6d9r1qsc/