使用hashchange加载不使用辅助导航的动态页面

时间:2012-08-31 16:51:55

标签: ajax jquery dynamic hashchange

关于为什么这不起作用的任何想法。我正在使用CSS-Tricks的教程,使用AJAX动态加载页面。这很好用,直到我在某些页面上引入辅助导航,导致页面正常加载。

这是我正在使用的代码。我正在使用类来设计不同导航区域的样式。

$(function() {

var newHash      = "",
    $mainContent = $("#main-content"),
    $pageWrap    = $("#page-wrap"),
    baseHeight   = 0,
    $el;

$pageWrap.height($pageWrap.height());
baseHeight = $pageWrap.height() - $mainContent.height();

$("nav").delegate("a", "click", function() {
    window.location.hash = $(this).attr("href");
    return false;
});

$(window).bind('hashchange', function(){

    newHash = window.location.hash.substring(1);

    if (newHash) {
        $mainContent
            .find("#guts")
            .fadeOut(200, function() {
                $mainContent.hide().load(newHash + " #guts", function() {
                    $mainContent.fadeIn(200, function() {
                        $pageWrap.animate({
                            height: baseHeight + $mainContent.height() + "px"
                        });
                    });
                    $("nav a").removeClass("current");
                    $("nav a[href="+newHash+"]").addClass("current");
                });
            });
    };

});

$(window).trigger('hashchange');

});

网站:http://darynjohnson.com/Medical%20Futures/about.php

1 个答案:

答案 0 :(得分:0)

这些新创建的链接没有绑定到它们的任何事件,因为你在未更改的对象上设置了delagate函数。带有相同标签的新添加对象(此处为“nav”)不会产生爆燃。

使用:

$('#page').delegate("nav a", "click", function() {
  window.location.hash = $(this).attr("href");
  return false;
});

我还建议你将jQuery升级到最新版本并用on()替换delegate()