2012-08-14 172 views
1

我在我的代码中有一个小问题。 我有一个函数,它需要loadData AJAX页面。 此结果将复选框放在我的页面上。 (这是行)JQuery从Ajax更改复选框状态

现在我想单击一个复选框时,执行一个AJAX请求是更改数据库中的值(这也是可以的)。

问题是: 当我点击一个复选框(未选中)时,它会勾选并执行ajax,一旦执行了ajax,该框就不会单独选中。

我做了几个测试,我意识到问题只发生在Ajax请求中的复选框时。我试图添加$(选择器).attr('checked',true)和false,但没有任何工作。

jQuery的(问题是在loadData函数执行Ajax时,单独的复选框取消选中):

$(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(); 
}); 

我就使视频向您展示在行动的问题:http://youtu.be/nG9XF2f4M18

感谢你的帮助。

回答

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

它应该是:

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

您的其他2次Ajax请求同样的事情。 成功的代码在接收结果时被执行。

+0

嗨感谢您的回答,但点击方法已附加到复选框(我已使用警报(“ok”)进行测试,并且在单击该复选框时它已工作) 我也测试过复选框由for循环生成并没有问题。只有当复选框来自ajax响应时才会出现问题。 – Warks 2012-08-14 22:18:46

+0

我制作了一段视频,向您展示问题:http://youtu.be/nG9XF2f4M18 – Warks 2012-08-14 22:51:29

+0

好的我现在明白了。在你为视频制作的代码中,你有没有替代// TODO的东西?此外,你可以访问所有的HTML代码链接?顺便说一下,您应该在document.ready之外声明函数loadData。 – 2012-08-15 02:44:47