如何避免在 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/
我有一个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/