Jquery каждый цикл не работает - PullRequest
1 голос
/ 01 апреля 2009

Я новичок в jquery, но пытаюсь использовать его в своем проекте. Я пытаюсь перебрать все ссылки внутри #rate_box и добавить к ним событие click. Это событие click отправит некоторые данные во внешний скрипт php, а затем должно отменить привязку событий click по всем ссылкам (чтобы люди не могли оценить дважды в быстрой последовательности). Затем он должен поместить данные, полученные из скрипта php, в тег span называется # status.

Однако мой код даже не выполняет предупреждение («Индекс:» + 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>

1 Ответ

5 голосов
/ 01 апреля 2009

Вам не нужно циклически перебирать каждую ссылку, привязывающую обработчик по отдельности, вы можете просто сделать это:

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

});

То же самое касается отмены привязки:

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

Что касается вашего кода, он, вероятно, не выполняется, потому что вы не закрыли внутреннюю каждый при откреплении тегов элемента, поэтому это недопустимый JavaScript:

$('#rate_box a').each(function(i) {
    $(this).unbind('click');
} // <- missing closing ");"

Вам действительно нужно использовать такой инструмент, как Firebug или Firebug Lite, для отладки вашего javascript, хотя что-то подобное вышеупомянутому должно просто дать вам ошибку Javascript в большинстве браузеров.

РЕДАКТИРОВАТЬ Если вы хотите найти индекс текущей ссылки при ее нажатии, вы делаете это:

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'); 
    });
});
...