也许我试图以错误的方式解决这个问题,但是我已经将服务器设置为在请求时构建页面(如果基本上没有启用 JS),否则我希望它发送请求的页面然后 JS 应该使用 jQueries .load 函数覆盖主导航以仅请求和显示内容。
我已经有一个辅助函数来发出请求并显示结果,它只需要一个字符串作为输入,即页面的名称。加载页面后,我运行了 $.each 语句来设置 href,但是在检查 DOM 时它似乎没有出现,我不知道为什么。
var $menuAnchors = $("#menu a");
$.each($menuAnchors, function (index, value) {
if (index == 0) {
$menuAnchors.eq(0).click('home', setCurrentPage);
}
if (index == 1) {
$menuAnchors.eq(1).click('services', setCurrentPage);
}
if (index == 2) {
$menuAnchors.eq(2).click('contact', setCurrentPage);
}
})
它在 if 语句中很好,所以我必须错误地使用 .click 函数,但是我也尝试将它与 .attr 函数一起应用,然后它确实出现在 dom 中,但它似乎没有好好工作。如果我手动调用该函数来更改页面它工作正常,所以我假设此时可能两个事件触发方法都在工作,但也许它仍在将请求发送到服务器,我需要停止传播事件?如果是这样,我会怎么做?我可以在这个 if 语句中执行此操作,还是必须修改我的 evenhandler 函数?顺便说一句,这是该功能:
var setCurrentPage = function(page) {
//change contents
var $content = $("#content");
$content.empty();
$content.load("/html/ajax/" + page + ".html");
//set menubar class
var $listItems = $("#menu li");
$.each($listItems, function (index, value) {
$listItems.eq(index).removeAttr("class");
if (page == "home" && index == 0) {
$listItems.eq(index).attr("class", "current");
}
if (page == "services" && index == 1) {
$listItems.eq(index).attr("class", "current");
}
if (page == "contact" && index == 2) {
$listItems.eq(index).attr("class", "current");
}
})
}