2009-04-01 22 views
1

私はjqueryの初心者ですが、私のプロジェクトでそれを使用しようとしています。 #rate_box内のすべてのリンクをループしてクリックイベントを追加しようとしています。このクリックイベントは、外部のPHPスクリプトにデータを投稿し、すべてのリンク上でクリックイベントをバインド解除する必要があります(ユーザーが2回連続して評価することはできません)。その後、PHPスクリプトから受け取ったデータを#statusと呼ばれるスパンタグ。Jquery各ループが機能しない

しかし、私のコードではアラート( "Index:" + i)も実行されません。私はそれを正しく縛っていますか?

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#rate_box a').each(function(i) { 
      $(this).click(function() { 
       alert("Index: "+i); 
       $.post("../includes/process/rating.php", {id: "<?php $game_id ?>", type: "game", rating: i+1}, 
       function(data) { 
        $('#rate_box a').each(function(i) { 
         $(this).unbind('click'); 
        } 
        $('#status').html(data).fadeIn("normal"); 
       }); 
      }); 
     }); 
    }); 
</script> 

答えて

5

あなたはちょうどこの行うことができ、個別のハンドラをバインド各リンクを介してループする必要はありません。

// bind click handler to all <a> tags inside #rate_box 
$('#rate_box a').click(function() { 

}); 

同じバインド解除のために行く:

$('#rate_box a').unbind('click'); 

限りをあなたのコード、それはおそらくあなたが要素タグをバインドしているときに内側を閉じていないので、実行されていないので、それは無効ですjavascript:

FirebugやFirebug Liteなどのツールを使用してJavaScriptをデバッグする必要がありますが、上記のようなものはほとんどのブラウザでJavascriptエラーが発生します。あなたはそれが時にクリックされたときに、現在のリンクのインデックスを検索したい場合は

EDIT、あなたがこれを行う:

var links = $('#rate_box a'); 
$(links).click(function() { 
    // this is to stop successive clicks on ratings, 
    // although the server should still validate to make 
    // sure only one rating is sent per game 
    if($(this).hasClass('inactive_for_click')) return false; 
    $(links).addClass('inactive_for_click'); 
    // get the index of the link relative to the rest, add 1 
    var index = $(links).index(this) + 1; 
    $.post("../includes/process/rating.php", { 
     id: "<?php $game_id ?>", 
     type: "game", 
     rating: index 
    }, function(data) { 
     $('#status').html(data).fadeIn("normal"); 
     // unbind links to disable further voting 
     $(links).unbind('click'); 
    }); 
}); 
+0

は私がバインドされている個々のもののインデックスを知っている必要があります(それは次のようになります0-5)Ajaxがそのデータを外部スクリプト(これは5つ星評価システム)に投稿するので、 – Tom

+0

これを達成する方法を示すために私のコードを更新しました。 –

+0

もしあなたが 'var links = $( '#rate_box a');' '$(links).click(...'の代わりにlinks.click(... 'リンク)は、関数内のリンクだけにリンクします。リンクは、jqueryオブジェクトであるグローバル変数です。 –

関連する問題