2009-04-01 5 views
1

저는 jquery에 초보자이지만 프로젝트에서 사용하려고합니다. #rate_box 내의 모든 링크를 반복하여 클릭 이벤트를 추가하려고합니다. 이 클릭 이벤트는 일부 데이터를 외부 PHP 스크립트에 게시 한 다음 모든 링크에서 클릭 이벤트를 바인딩 해제해야합니다 (사람들이 빠르게 연속해서 두 번 평가하지 못하도록합니다). 그러면 PHP 스크립트에서 수신 한 데이터를 #status라는 span 태그.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'); 

를 아득히 귀하의 코드, 그것은 아마도 당신이 요소 태그를 바인딩 할 때 각각 내부를 닫지 않았기 때문에 실행되지 않습니다, 그래서 그것은 잘못된 자바 스크립트입니다 :

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

자바 스크립트를 디버깅하려면 Firebug 또는 Firebug Lite와 같은 도구를 사용해야합니다. 위와 같은 방법으로 대부분의 브라우저에서 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'); 
    }); 
}); 
+0

내가 바인더 제본되어 각 개별 물건의 인덱스를 알아야합니다 (이 될 것입니다 0-5) Ajax가 해당 데이터를 외부 스크립트에 게시하기 때문에 (이것은 별 5 개 등급 시스템 임) – Tom

+0

이를 달성하는 방법을 보여주기 위해 내 코드가 업데이트되었습니다. –

+0

만약 당신이'var links = $ ('# rate_box a');'그런다면'$ (links) .click (...'대신에'links.click (...' 링크들)을 함수 내의 링크들에'링크들 '이 jquery 객체 인 전역 var이기 때문입니다. –

관련 문제