2016-01-31 43 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謝謝,我會研究它! –