jquery setInterval和setTimeout不起作用

时间:2012-04-16 13:08:06

标签: jquery

我被困在这里...我试图在每次点击后停用按钮5秒钟... 我可以使按钮无效,但在将其带回时会遇到麻烦 我尝试了bith setIntervel和setTimeout

     function reverser(){
       $(this).css("background","url(images/btn_active.gif) no-repeat 0 0");
   }


      $(".vtbtn").click(function() {  
       var link =$(this).attr('id');
           $(this).css("background","url(images/btn_inactive.gif) no-repeat 0 0");  
          $.ajax({  
              type: "POST",  
              url: "sql.php",  
              data:"voted=" +link+"&user="+<?php echo $userId;?>,  
              success: function(data){  
              setInterval('reverser()',3000);
              } 
          }); 


});

2 个答案:

答案 0 :(得分:1)

可能没有定义

this,请尝试:

function reverser(){
   $(".vtbtn").css("background","url(images/btn_active.gif) no-repeat 0 0");
}

然后像这样调用函数:

setInterval(reverser, 3000);

你真的需要每三秒运行一次这个功能,是不是只能在Ajax调用完成后运行?

答案 1 :(得分:1)

您的反向函数中的

this不会引用被单击的元素。更改您的代码以传递该元素:

function reverser(ele){
   $(ele).css("background","url(images/btn_active.gif) no-repeat 0 0");
}

$(".vtbtn").click(function() {  
      var link =$(this).attr('id');
      var that = this; // save this
      $(that).css("background","url(images/btn_inactive.gif) no-repeat 0 0");  
      $.ajax({  
          type: "POST",  
          url: "sql.php",  
          data:"voted=" +link+"&user="+<?php echo $userId;?>,  
          success: function(data){  
              setTimeout(function() { 
                  reverser(that); 
              },3000);
          } 
      }); 
});

我更改了它,以便setTimeout传递一个函数而不是一个字符串(这将导致调用eval,这是邪恶的),以便that变量可以传递给{ {1}}功能。