1

我的代码中有一个小问题。我有一个函数,它需要 loadData AJAX 页面。这个结果在我的页面上放置了复选框。(还行吧)

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

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

我进行了几次测试,我意识到只有当 Ajax 请求中的复选框被选中时才会出现问题。

注意:我尝试添加 $(selector).attr('checked', true) 和 false,但没有任何效果。

Jquery(问题出在执行Ajax时的loadData函数中,仅取消选中复选框):

 $(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

谢谢你的帮助。

4

1 回答 1

0

**答案是根据我在评论中获得的信息更新的**

我在你的文件中发现了问题。

问题是您使用事件“.ajaxComplete”。如果您正确阅读了文档,它会说每次进行 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 请求也是如此。成功的代码在收到结果时被执行。

于 2012-08-14T20:38:27.890 回答