Jquery Ajax加载单击功能只工作一次

Jquery Ajax加载单击功能只工作一次,jquery,html,ajax,Jquery,Html,Ajax,我已经摆弄了几个小时了,我不明白为什么会发生这种事 我编写了一个jquery导航脚本,用于替换名为“contentwrapper”的div中的内容。内容应该隐藏,加载动画显示,然后消失,新内容淡入。问题是动画不会每隔一次出现。第一次单击时,它会工作,但第二次单击时页面会刷新。这种循环还在继续。尽管使用了.on(),但似乎单击功能未激活。这是我的密码: $(window).ready(function(){ $('.menu_top').on('click', function(e) {

我已经摆弄了几个小时了,我不明白为什么会发生这种事

我编写了一个jquery导航脚本,用于替换名为“contentwrapper”的div中的内容。内容应该隐藏,加载动画显示,然后消失,新内容淡入。问题是动画不会每隔一次出现。第一次单击时,它会工作,但第二次单击时页面会刷新。这种循环还在继续。尽管使用了
.on()
,但似乎单击功能未激活。这是我的密码:

$(window).ready(function(){

    $('.menu_top').on('click', function(e) {
    $("#loading").show();
    var href = $(this).attr('href');
    history.pushState({}, '', href);
    $('#contentwrapper').fadeOut('normal').hide().load(href + "#contentwrapper >  *").fadeIn('slow');

return false
});
    $(document).ajaxSuccess(function() {
    $("#loading").fadeOut();
});
});
给你


我尝试了在互联网上找到的所有东西,但都没有用。

我想我知道为什么会发生这种情况

在单击处理程序中,您的最终语句是:

return false
这表示您希望在运行代码后“取消”单击事件(AJAX将内容加载到页面中)

问题在于,它实际上无法阻止“取消”单击事件。查看浏览器中的URL/地址栏:当您单击标题项时,您将看到URL发生更改。您的浏览器每次都在重新加载页面。有时您会看到动画,因为AJAX请求在浏览器加载页面之前完成

为了解决这个问题,我建议您将头元素设置为锚以外的其他元素()。让它们成为内联段落块()或其他东西。jQuery可以检测对任何元素的点击,这样代码就可以运行了


最后,如果您执行了上述操作,并且仍然希望支持禁用JavaScript的浏览器,那么可以使用一个块来为这些人使用老式的锚(带有href属性和所有内容)。这是可选的,仅当您希望支持没有Javascript的用户时(少数)。

我不知道这是否重要,但
$(窗口)。ready(fn)
应该是
$(文档)。ready(fn)
。我看不出您的演示页面上有什么问题。顶部的每个菜单项都会在第一次单击时为我加载新内容。您没有提到任何问题,而且所谓的演示也不是演示,它是某种实际的站点,查看其代码需要浏览器的某些元素检查器工具。@jfriend00您说得对,它应该是文档。正如我提到的,脚本只有一半的时间能够正常运行。每个菜单项都会加载内容,但不会每次都以平滑的淡入淡出动作从脚本中加载内容。我认为URL栏中的URL正在更改,是因为
.pushState()
行代码,而不是因为页面正在重新加载
return false
从jQuery单击处理程序将执行
e.preventDefault()
e.stopPropagation()
这将避免默认链接处理。jfriend再次正确。如果没有
return false
,标签将使用其默认操作。将它们更改为证明了我的怀疑:
.load(href+“#contentwrapper>*”
正在将整个页面加载到div#contentwrapper中。代码有问题吗?修复了<代码>返回false达到了它的目的,直到代码变得更加复杂。删除它,然后更改标记中的链接,可以使脚本在100%的时间内正常运行。谢谢大家的意见。