2016-01-31 44 views
0

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

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

感谢,

的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> 
+0

这个复选框是否是$(“#tableTask”)'容器? –

+0

@NikolayErmakov是的! –

+0

实际上,你添加到你的问题的HTML说的是相反的。 –

回答

0

当你在你消灭复选框事件处理程序,你之前有没有Ajax回调重新加载$("#tableTask")内容。

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

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

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

所以你会不断加入这个事件处理程序,新创建的复选框。

+0

非常感谢你@NikolayErmakov,工作正常! –

+0

@GuileGarcia注意这被称为'事件代表团',你会经常使用它http://learn.jquery.com/events/event-delegation/ – charlietfl

+0

@charlietfl谢谢,我会研究它! –