2012-04-16 126 views
0

我被困在这里...我试图在每次点击后5秒内不激活一个按钮... 我可以不激活按钮,但遇到麻烦时将它带回 我试过bith setIntervel和setTimeout的jquery setInterval和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); 
       } 
      }); 


}); 

回答

1

this可能是没有定义,尝试:

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

,然后调用函数,像这样:

setInterval(reverser, 3000); 

你真的需要每三秒运行一次这个函数吗?在Ajax调用完成后运行它不够吗?

+0

如果'vtbtn'类有多个元素会怎么样? – 2012-04-16 13:15:05

+0

感谢它的工作......但为什么$(this)函数不工作,而它在我的第一个功能呢?..我想我知道了.. – 2012-04-16 13:15:21

+0

然后元素将不得不在功能中传递。 – adeneo 2012-04-16 13:15:33

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变量可以传入resverser函数。

+0

谢谢......它的邪恶...... – 2012-04-16 13:29:52