Javascript 两个调用同一函数的dom事件如果同时发生,则只应调用该函数一次
我有一个输入和一个按钮。当我从输入中模糊并且输入已更改时,应该调用price()函数。另外,当我单击按钮时,应该调用price()函数 问题在于,当用户修改输入值并单击按钮时,price()函数会被调用两次。我不想发生这种事 我尝试了老式的方法,在输入时将变量“inPriceFunction”设置为true,并在输入前检查它是否未设置。这不起作用,因为两个事件(模糊和单击)是在完全相同的时间执行的,if和变量集没有时间发生 我怎样才能避免呢 我所尝试的:Javascript 两个调用同一函数的dom事件如果同时发生,则只应调用该函数一次,javascript,Javascript,我有一个输入和一个按钮。当我从输入中模糊并且输入已更改时,应该调用price()函数。另外,当我单击按钮时,应该调用price()函数 问题在于,当用户修改输入值并单击按钮时,price()函数会被调用两次。我不想发生这种事 我尝试了老式的方法,在输入时将变量“inPriceFunction”设置为true,并在输入前检查它是否未设置。这不起作用,因为两个事件(模糊和单击)是在完全相同的时间执行的,if和变量集没有时间发生 我怎样才能避免呢 我所尝试的: <div> <
<div>
<input type=text onchange="price();" />
</div>
<button onclick="price();" />test</button>
<script>
called = 0;
function price() {
if(called == true){
return;
} else {
called = true;
}
console.log("called");
called=false;
}
</script>
测试
调用=0;
函数价格(){
if(调用==true){
返回;
}否则{
调用=真;
}
控制台日志(“调用”);
调用=错误;
}
添加一个超时,类似这样
function schedludePrice() {
if(myTimeOut){
clearTimeout(myTimeOut);
}
myTimeOut = setTimeout('price()', 10);
}
这样,如果函数在短时间内被blur and click事件调用两次,则Price函数将只被调用一次。最简单的处理方法可能是在调用Inver Price时存储一个日期时间,并使用它检查是否最近调用过
if (refDate > new Date(10000 + (new Date())) { // 1 second delay?
return;
}
refDate = new Date();
但是,两个对Date的调用很可能返回完全相同的日期(因此不需要进行日期操作)。单击并更改事件不会同时发生。它们一个接一个地发生
- 首先,触发“change”事件,设置
,然后执行called=true
并再次设置console.log(“called”)
called=false
- 然后,触发“click”事件,但是
,因此它设置called==false
called=true然后执行
并再次设置console.log(“调用”)
called=false
将防止您的函数在同一时间内被调用两次 指定的时间长度李>throttle
将阻止函数被调用两次一次
- 这里有一个JSFIDLE可以完成这项工作。当然,您不应该使用全局变量:
您已经介绍了:
var clicktimer = null;
function clickfunc() {
var BLOCK_TIME = 500;
function handleclick() {
console.log("Pressed!");
}
if (clicktimer) {
console.log("Skipping handling of click!");
} else {
handleclick();
clicktimer = setTimeout(function() {
clicktimer = null;
}, BLOCK_TIME);
}
}