Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何设置setTimeout和clearTimeout在同一个按钮上运行_Javascript_Jquery_Onclick - Fatal编程技术网

Javascript 如何设置setTimeout和clearTimeout在同一个按钮上运行

Javascript 如何设置setTimeout和clearTimeout在同一个按钮上运行,javascript,jquery,onclick,Javascript,Jquery,Onclick,这是我的密码 $('#btnDelete').unbind().click(function(){ var time = setTimeout(function() { $.ajax({ type: 'ajax', method: 'get', async: false, url: '<?php echo base_url() ?>main/delete',

这是我的密码

$('#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功能,以便每次单击同一按钮时计时器都会重置?谢谢

使用数据属性保存计时器的状态。您可以使用“数据”属性来确定是否需要取消它。将超时id存储到数据属性中,然后单击以检查超时id

$('#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,并且无需将数据属性设置为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.clickfunction{ var btn=$this;//引用单击的按钮 如果btn.datatimer{//确定是否已单击它 window.clearTimeoutbtn.datatimer//取消超时 btn.datatimer,null;//将其切换为不使用 }否则{ var time=setTimeoutfunction{ btn.datatimer,null;//如果需要,请重置它 btn.textnew Date.ToLocalString }, 3000 btn.datatimer,time;//存储下一次单击的超时id } }; 删除1 删除2 删除3 删除4尝试以下操作:

  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);
  });

将时间设置为全局变量或可在单击处理程序外部访问。检查时间值,如果它有任何值,则重置它,否则您的正常代码将正常工作。

可能重复感谢!你的代码可以工作。但我如何使它适用于多个记录?我目前有一个数据库,其中有4条记录,所有记录都有各自的按钮,用于设置和重置计时器。代码应该适用于每个按钮。您也可以将其绑定,因为计时器绑定到按钮,并且不使用全局变量。尝试连续按下4个按钮,只有最后按下的按钮才会执行上面的代码绑定到一个id,id只能是页面上的一个元素。。。你换了选择器了吗?我不知道你试了什么,很难帮上忙。。。。您是如何更改代码的?