在load()之后,Jquery没有检测到checkbox中的更改

时间:2016-01-31 01:22:15

标签: jquery django

此代码仅检测一次更改复选框。在我使用load()函数后,未检测到复选框中的另一个更改。

这个问题的解决方案是什么?

谢谢,

Jquery的:

$(document).ready(function () {
    $(".checkTask").on("change", changed);
});


function changed() {
    var id = $(this).attr("idTask");
    var csrftoken = getCookie('csrftoken');

    // Checked
    if ($(this).prop('checked')) {
        $.post("/link/", {id: id, csrfmiddlewaretoken: csrftoken}, function (data) {
            $("#tableTask").load(location.href + " #tableTask>*");
        });
    }
    // Unchecked
    else {
        $.post("/link/", {
            id: id,
            csrfmiddlewaretoken: csrftoken
        }, function (data) {
            $("#tableTask").load(location.href + " #tableTask>*");
        });
    }
}

HTML:

<table class="table table-condensed table-hover table-striped">
    <tbody id="tableTask">
        <tr>
            <td>    
                <input class="checkTask" type="checkbox" idTask="{{ task.id }}"/>
            </td>
        </tr>
    </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

当您在ajax回调中重新加载$("#tableTask")的内容时,您将清除之前的复选框事件处理程序。

$(".checkTask").on("change", changed);重写为:

$(document).on("change", ".checkTask", changed);

$("#tableTask").on("change", ".checkTask", changed);

因此您将继续将此事件处理程序添加到新创建的复选框中。