![](/img/trans.png)
[英]How do I use cleartimeout to stop a recursive settimeout function in .getJSON?
[英]How do I set setTimeout and clearTimeout to function on the same button
这是我的代码
$('#btnDelete').unbind().click(function(){
var time = setTimeout(function() {
$.ajax({
type: 'ajax',
method: 'get',
async: false,
url: '<?php echo base_url() ?>main/delete',
data: {id:id},
dataType: 'json',
success: function(response){
if(response.success){
showNews();
} else {
alert('Error');
}
},
error: function(){
alert('Error deleting')
}
});
}, 10000);
});
我在哪里可以放置clearTimeout()函数,以便每次单击同一按钮时计时器都会重置? 谢谢!
尝试这个:
var time;
$('#btnDelete').unbind().click(function() {
if (time) {
clearTimeout(time);
time = null;
}
time = setTimeout(function() {
$.ajax({
type: 'ajax',
method: 'get',
async: false,
url: '<?php echo base_url() ?>main/delete',
data: {
id: id
},
dataType: 'json',
success: function(response) {
if (response.success) {
showNews();
} else {
alert('Error');
}
},
error: function() {
alert('Error deleting')
}
});
}, 10000);
});
将time
作为全局变量或在点击处理程序之外可以访问。 检查时间值,如果有任何值,则将其重置,否则您的常规代码将起作用。
使用数据属性保存计时器的状态。 您可以使用data属性来确定是否需要取消它。 您将超时ID存储到data属性中,然后单击以对其进行检查。
$('#btnDelete').unbind().click(function(){
var btn = $(this); // reference the button that was clicked
if (btn.data("timer")) { // determine if it was already clicked
window.clearTimeout(btn.data("timer")) // cancel the timeout
btn.data("timer", null); // toggle it to not being used
} else {
var time = setTimeout(function() {
btn.data("timer", null); // reset it if you want
/* your code here */
}, 10000)
btn.data("timer", time); // store the timeout id for next click
}
});
如果您要重新启动它,则不要执行else,并且不需要将data属性设置为null,因为您将覆盖它。
$('#btnDelete').unbind().click(function(){
var btn = $(this);
if (btn.data("timer")) {
window.clearTimeout(btn.data("timer"))
}
var time = setTimeout(function() {
btn.data("timer", null); // reset it if you want
/* your code here */
}, 10000)
btn.data("timer", time);
});
在多个按钮上运行的示例
$('.btn-delete').unbind().click(function(){ var btn = $(this); // reference the button that was clicked if (btn.data("timer")) { // determine if it was already clicked window.clearTimeout(btn.data("timer")) // cancel the timeout btn.data("timer", null); // toggle it to not being used } else { var time = setTimeout(function() { btn.data("timer", null); // reset it if you want btn.text((new Date()).toLocaleString()) }, 3000) btn.data("timer", time); // store the timeout id for next click } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button class="btn-delete">Delete 1</button> <button class="btn-delete">Delete 2</button> <button class="btn-delete">Delete 3</button> <button class="btn-delete">Delete 4</button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.