2012-08-14 3 views
1

내 코드에 작은 문제가있다. loadData AJAX 페이지가 필요한 함수가 있습니다. 이 결과는 내 페이지에 체크 박스를 표시합니다.Ajax의 JQuery 변경 체크 박스 상태

이제 체크 박스를 클릭하면 AJAX 요청을 실행하여 데이터베이스의 값을 변경하는 것이 좋습니다 (이것도 정상입니다).

문제는 다음과 같습니다. 확인란을 선택하면 (선택되지 않음) ajax가 실행되고 ajax가 실행되면 상자가 모두 선택 취소됩니다.

몇 가지 테스트를했고 Ajax 요청의 체크 박스가 선택된 경우에만 문제가 발생한다는 것을 알았습니다.

참고 : $ (선택기) .attr ('checked', true) 및 false를 추가하려했지만 아무 것도 작동하지 않았습니다. http://youtu.be/nG9XF2f4M18

감사에 : 나는 당신에게 행동의 문제를 보여주기 위해 비디오를 확인했습니다

$(document).ready(function() { 
    $('#TableContainer .RCkbox').live('click',function(){ 

     var idOperation = 550; 
     if($(this).is(":checked")){ 

      $.ajax({ 
       type: "POST", 
       url: "includes/ajax/OperationRapprochement.php", 
       data: "sessionId=" + <?php echo $User->getId(); ?> + "&AccountNumber=" + <?php echo $compte->getId(); ?> + "&idOperation=" + idOperation + "&action=rapproche", 
       success: function(msg) 
       { 
        //TODO 

       } 
      }); 
     } 
     else{ 

       $.ajax({ 
       type: "POST", 
       url: "includes/ajax/OperationRapprochement.php", 
       data: "sessionId=" + <?php echo $User->getId(); ?> + "&AccountNumber=" + <?php echo $compte->getId(); ?> + "&idOperation=" + idOperation + "&action=derapproche", 
       success: function(msg) 
       { 
         //TODO 

       } 
      }); 
     } 
    }); 


    function loadData(){ 
    $.ajax({ 
      type: "POST", 
      url: "includes/ajax/test.php", 
      data: "sessionId=" + <?php echo $User->getId(); ?> + "&AccountNumber=" + <?php echo $compte->getId(); ?>, 
      success: function(msg){ 
        $("#TableContainer").ajaxComplete(function(event, request, settings){ 
          $("#TableContainer").html(msg); 
        }); 
      } 
     }); 
    } 

    loadData(); 
}); 

:

JQuery와는 (아약스가 실행될 때 문제는 loadData 기능에 체크 박스 만 선택 해제입니다) 당신의 도움.

답변

0

** 대답은 내가

** 내가 파일에 문제가있는 코멘트 얻은 정보로 업데이트되었습니다.

중요한 것은 ".ajaxComplete"이벤트를 사용한다는 것입니다. documentation을 올바르게 읽으면 ajax 호출이 발생할 때마다 이벤트가 호출된다고 표시됩니다.

체크 상자를 클릭 할 때 ajax 호출을하기 때문에 결과를 수신하면 loadData 함수의 콜백이 다시 호출되어 $("#TableContainer").html(msg);을 다시 실행합니다. 즉, 내용을 바꿉니다 다시. 그런 이유로 체크 박스를 잃어버린 것입니다.

코드에서 변경해야 할 사항은 필요하지 않으므로 .ajaxComplete 이벤트를 제거하면됩니다.

function loadData(){ 
    $.ajax 
    ({ 
     type: "POST", 
     url: "includes/ajax/test.php", 
     data: "number=" + number, 
     success: function(msg) 
     { 
      $("#TableContainer").ajaxComplete(function(event, request, settings) { 
       $("#TableContainer").html(msg); 
      }); 
     } 
    }); 
} 

그것은해야한다 : 다른 2 개 아약스 요청에 대한

function loadData(){ 
    $.ajax 
    ({ 
     type: "POST", 
     url: "includes/ajax/test.php", 
     data: "number=" + number, 
     success: function(msg) 
     { 
       $("#TableContainer").html(msg); 
     } 
    }); 
} 

똑같은

은 당신의 코드입니다. 결과의 수신시 성공한 코드가 실행됩니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다.하지만 클릭 방법이 알림 상자에 첨부되어 있습니다 (알림 ("ok")로 테스트했습니다. 확인란을 클릭하면 작동합니다) for 루프에 의해 생성 된 체크 박스 및 문제 없음. 문제는 체크 박스가 아약스 응답에서 온 경우에만 발생합니다. – Warks

+0

나는 당신에게 문제를 보여주기 위해 비디오를 만들었습니다 : http://youtu.be/nG9XF2f4M18 – Warks

+0

오케이 지금 받으십시오. 비디오를 위해 만든 코드에서 // TODO를 대체하는 것이 있습니까? 또한 모든 HTML 코드가있는 링크에 대한 액세스 권한을 부여 할 수 있습니까? 그런데 document.ready 외부에서 loadData 함수를 선언해야합니다. –