【问题标题】:JQuery change checkbox state from AjaxJQuery 从 Ajax 更改复选框状态
【发布时间】:2012-08-11 03:53:10
【问题描述】:

我的代码有一个小问题。 我有一个函数,它需要 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

感谢您的帮助。

【问题讨论】:

    标签: jquery ajax checkbox


    【解决方案1】:

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

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

    问题是您使用事件“.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 请求也是如此。 成功的代码在收到结果后执行。

    【讨论】:

    • 您好,感谢您的回答,但单击方法已附加到复选框(我已经使用警报(“ok”)进行了测试,当我单击复选框时它就可以工作)我'我还使用 for 循环生成的复选框进行了测试,没有问题。只有当复选框来自 ajax 响应时才会出现问题。
    • 好的,我现在明白了。在您为视频制作的代码中,您是否有替换 //TODO 的内容?另外,您可以访问所有 html 代码所在的链接吗?顺便说一句,您应该在 document.ready 之外声明函数 loadData。
    • 是的,有些东西取代了 //TODO,它是 JQuery 的一个对话框,但有或没有它是一回事。只有当我删除 $.ajax... 复选框才有效。只有当我在 Ajax 响应的元素上单击 ajax 请求时才会出现问题。我将 loadData 函数更改为 document.ready 之外,没有任何变化。感谢您的帮助
    • 这是一个非常奇怪的行为。我需要查看生成的 HTML/Javascript 示例来帮助您。
    • 我上传了 3 个 php 页面:depositfiles.com/files/rzxlm6jzfIndex.php 包含 Javascript 和 HTML(不要担心 PHP 类,它们包含在另一个页面中)。 test.php 是生成复选框的 AJAX 请求(第一次请求) OperationRapprochement.php 是复选框单击调用的 AJAX 请求。非常感谢您的帮助
    猜你喜欢
    • 2023-03-05
    • 2011-03-08
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2021-12-19
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多