0

ここで立ち往生しています...クリックごとに5秒間ボタンを非アクティブにしようとしています...ボタンを非アクティブにすることはできますが、戻すときに問題が発生します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);
              } 
          }); 


});
4

2 に答える 2

1

thisはおそらく定義されていません。試してください:

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

そして、次のように関数を呼び出します。

setInterval(reverser, 3000);

そして、本当にその関数を 3 秒ごとに実行する必要があるのでしょうか? Ajax 呼び出しが完了した後に実行するだけで十分ではないでしょうか?

于 2012-04-16T13:12:36.723 に答える
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関数に渡すことができます。

于 2012-04-16T13:14:33.527 に答える