Jquery在ajax刷新页面后无法正常工作

时间:2013-11-07 23:21:16

标签: javascript jquery ajax

我正在使用jquery代码来检查所有复选框,我确实喜欢这样:

var JQ7=jQuery.noConflict();
JQ7(document).ready(function(){
JQ7("#chkAll").click(function(){
    JQ7(".chk").prop("checked",JQ7("#chkAll").prop("checked"))
}) 
});
...
<input type="checkbox" id="chkAll" />   
...
<input type="checkbox" class="chk" />

我将所有代码放在ajax页面中。在第一次加载时它工作正常,但在我刷新后,它对我不起作用。这是ajax代码:

 function showUser(str,pageno,type,sub)
 {
     if (str=="" || pageno=="" || type=="" || sub== "")
 {
     document.getElementById("txtHint").innerHTML="";
     return;
 }
 if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
     xmlhttp=new XMLHttpRequest();
 }
 else
 {// code for IE6, IE5
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 xmlhttp.onreadystatechange=function()
 {
     if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
         document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
     }
 }

 xmlhttp.open("GET","<?php echo $view['router']->generate('listing') ?>?page="+pageno+"&genre="+str+"&cat="+type+"&subcat="+sub,true);
 xmlhttp.send();
 }

2 个答案:

答案 0 :(得分:5)

如果您动态构建部分页面,则需要使用$(...)。on()附加事件处理程序,否则当元素为时,事件处理程序将丢失更换。或者,您也可以在修改页面的这一部分时再次重新附加事件处理程序。

您需要使用第二个选择器参数附加事件处理程序,如下所示:

$("#parent").on("click", ".item-to-be-clicked", function () {
    ...
});

委派与非委派事件处理程序的示例:http://jsfiddle.net/pj5EW/

答案 1 :(得分:4)

对赖瑞恩的回答抄袭:

由于它当前已编码,因此您的点击处理程序仅适用于DOM中已存在的元素。在DOM加载后动态生成这些元素时,单击处理程序将不会看到它们。

您可以使用jQuery的on()delegate the event。这将处理程序放在文档(而不是元素)上,并允许您选择在DOM加载后添加到页面的元素:

JQ7(document).on('click','#chkAll',function(){
  var is_checked=this.checked;
  JQ7(".chk").prop("checked",is_checked);
});