2009-07-26 3 views
2

목록을 만든 후에 목록을 만든 후에 ".each"를 사용하여 모두 처리하고 클릭 절차를 적용하려고합니다.jQuery .attr 함수가 올바르게 반환되지 않습니다.

이 같은 내 코드가 잘 작동하지

:

$.ajax({ 
    url: "./views/todoitems.view.php", 
    data: "cmd=list", 
    success: function(html){ 
     $('#list-container').empty().append(html); 
     $('input:checkbox').each(function(){ 
      $check = $(this); 
      $check.click(function(){ 
       alert($(this).attr('itemid')); 
      }); 
     }); 
    } 
}); 

을하지만, 최대한 빨리 할 경고를 변경할 때

alert($check.attr('itemid')); 

그것은 오직에는 목록의 마지막 항목의 ID를 보여줍니다 클릭 한 물건. 내가 뭘 잘못하고 있니?

답변

4

$ check는 각 처리기 내에 설정되며 전역 변수입니다. 즉, 마지막 값 세트가 유지되며 마지막 체크 박스가 유지됩니다. 마우스 오른쪽 단추로 처리하려면 클릭 핸들러 안에 설정해야합니다.

$.ajax({ 
    url: "./views/todoitems.view.php", 
    data: "cmd=list", 
    success: function(html) { 
    $('#list-container').empty().append(html); 
    $('input:checkbox').each(function(){ 
     $check.click(function() { 
     var $check = $(this); 
     alert($check.attr('itemid')); 
     }); 
    }); 
    } 
}); 

참고 :로 변경var이 범위를 제어하기 위해 위의 사용됩니다.

또한 each()을 사용할 필요가 없습니다. 이것은 다음과 같습니다.

2

$ check는 선언이 var가 없기 때문에 암시 적 글로벌 변수가됩니다.

관련 문제