Javascript 加载不同内容后,jQuery.on()不起作用

Javascript 加载不同内容后,jQuery.on()不起作用,javascript,jquery,Javascript,Jquery,如果您转到并尝试单击第一篇文章上的“阅读更多…”,它将起作用,如果您单击存档中的同一链接。这一切都由这段代码处理。。。是的,这很混乱,但我一直在想各种各样的方法 (函数(){ var$Body=$(“#news.inner”); var$Title=$(“#news.Title”); var strnewurl=“”; $(文档)。在(“单击”,“a:包含(阅读更多…)”上,函数(事件){ var strOld=$Body.html(); var strURL=$(this.attr(“href

如果您转到并尝试单击第一篇文章上的“阅读更多…”,它将起作用,如果您单击存档中的同一链接。这一切都由这段代码处理。。。是的,这很混乱,但我一直在想各种各样的方法

(函数(){
var$Body=$(“#news.inner”);
var$Title=$(“#news.Title”);
var strnewurl=“”;
$(文档)。在(“单击”,“a:包含(阅读更多…)”上,函数(事件){
var strOld=$Body.html();
var strURL=$(this.attr(“href”).replace(“index.php”,strnewurl);
//var strBackURL=strURL.match(/archive.php/)?“archive.php?xnewsaction=getnews&newsarch=“+getURLVars(strURL)['newsarch']:strnewurl;
$Body.slideUp(100);
美元(
斯特鲁尔,
objNHF,
函数(strData){
$Body.html(strData+'').slideDown(1000,“easeOutBounce”);
$(文档)。在(“单击”,“新闻a.back”,函数(事件){
$Body.slideUp(100,函数(){
$(this.html(strOld);
})。向下滑动(1000,“easeOutBounce”);;
event.preventDefault();
} );
}
);
轨道(strURL);
event.preventDefault();
} );
} )();

如果您尝试加载另一个页面(比如“联系人”),然后再次单击“主页”,则会触发事件,但不会将内容加载到div中。我在这里做错了什么?非常令人费解。

我认为您不能为委托事件处理程序使用伪选择器。要解决此问题,只需在链接周围使用HTML结构即可:

$(document).on('click', '.more a', function () {...});
无论如何,这是一个好主意,因为
:contains
伪选择器非常慢<代码>a:contains(阅读更多…必须迭代页面上的每个链接,并获取要检查的文本。

您的选择器为空


这些变量在/live单击时的
之外声明。加载新内容时,这些元素将被替换,变量将指向旧副本

var $Body = $("#news .inner");
var $Title = $("#news .title");
在单击中移动这些变量,以便每次都刷新它们:

$(document).on("click", "a:contains(Read More...)", function(event) {

    var $Body = $("#news .inner");
    var $Title = $("#news .title");
...

令人费解的是,它一开始运行得很好,但是如果我更改了#news div所在的同一个div的内容,然后重新加载#news div,它将无法工作。我只是尝试在该类名的链接周围添加一个跨距,附加了事件,但仍然遇到了相同的问题。虽然我同意这种方法更符合逻辑,但它是一个我插入的新闻系统,我不想通过数千行代码来修改它的HTML。无论如何,这只是一个原型,因为它是该站点上此类链接的第一个实例。如果他/她使用的是
on()
,那么他/她使用的是jQuery 1.7+,其中
live()
版本不受欢迎(建议使用
on()
)。在版本1.7之前,最好使用委托()
。这一点很好。但是on()没有按预期工作,live()也会。我也尝试过live(),但似乎失败了。看起来好像on()取代了live()?这里有一个jsFiddle来演示相同的想法:我在实际页面上用id
news
重新加载一个div,其中包含一个class
internal
。那把小提琴是个糟糕的例子。参考实际站点并遵循以下步骤:1)单击“阅读更多…”以显示其实际工作情况。2) 单击联系人或主页以外的其他链接。3) 返回主页,再次单击“阅读更多…”链接。我想我应该说,
on()
正在工作,但
html()
不会替换内容。我只是想同时发布它!哈哈。不幸的是,我的名声还不允许我回答自己的问题,所以,为你万岁。无论如何,谢谢。不过,我也遇到了一个新问题(呃)。并不是说用户会这样做,但如果您多次单击“阅读更多…”并点击“啊,那是因为
a.back
处理程序应该是一个简单的
click()
,而不是
on()
。谢谢大家。我只能看到一个带有“阅读更多…”的项目。。。“在原始问题中链接的网站上。也许我不明白你的意思。参考我的下一个评论。我的意思是如果你在“阅读更多…”区域浏览,点击“