2012-04-16 124 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