我是JQuery的新手,我对addClass()有疑问。我花了一些时间试图让这个工作,但似乎我做错了什么。我用HTML和bootstrap创建了一个顶级菜单。我假设访问者将首先登陆我的index.php,所以我为index.php创建了class =“active”。然后,如果他们点击顶部菜单上的任何其他链接(例如关于我们),则class =“active”将添加到index.php的“li”选项卡中并删除class =“active”。 / p>
以下是我的HTML代码:
<div class="nav-collapse collapse">
<ul class="nav pull-right">
<li id="home" class="active"><a href="index.php"> Home</a></li>
<li id="about"><a href="about_us.php"> About Us</a></li>
<li id="browse"><a href="browse.php"> Browse</a></li>
<li id="contact"><a href="contact.php"> Contact</a></li>
</ul>
</div>
以下是我使用的JQuery代码,并尝试完成此操作。
$(function (){
var sidebar = $('.nav');
sidebar.delegate("li", "click", function(){
if($(this).hasClass('active')){
//If click on the tab that is currently active, it will do nothing.
}else{
sidebar.find('.active').addClass('inactive');
sidebar.find('.active').removeClass('active');
$(this).removeClass('inactive');
$(this).addClass('active');
}
});
});
我在本地服务器上测试了它。点击它后,我可以看到顶部菜单中的标签变为灰色,但它没有停留。所以我确信我做错了什么,但不确定在哪里。我是JQuery的新手,所以我希望我可以向你们学习。谢谢!
答案 0 :(得分:2)
当点击链接时,它会将浏览器带到一个全新的页面,从而启动一个全新的javascript环境,你对当前页面所做的一切都不会转移到新加载的页面。
因此,可以在当前页面上更改活动类,但是然后加载整个新页面,其从第一页继承任何内容(例如,它从头开始)。加载新页面后,您的第一页代码将不再播放。
您需要将活动类编码到每个单独的页面中(因为每个页面都知道它是什么页面),或者有一个通用的JS集合,当页面根据URL加载时设置活动类,因此它是初始化的在页面加载时正确。
此外,您可能不需要非活动类。默认的CSS状态可以表示非活动外观,活动类可以应用CSS覆盖来显示活动状态。
答案 1 :(得分:0)
这不起作用,因为当有人点击其他链接时,会将其重定向到其他页面。但是,您的标题并不真正知道点击了哪个链接,也不知道它在哪个页面上。你需要让你的标题知道你是哪个页面。这有意义吗?
答案 2 :(得分:0)
其他答案是正确的,当您点击标签时,您正在打开新页面,从而失去了您的javascript环境。
如果您想拥有单页应用,可以使用preventDefault阻止浏览器关注该链接。
sidebar.delegate("li", "click", function(e){
e.preventDefault();
if($(this).hasClass('active')){
//If click on the tab that is currently active, it will do nothing.
}else{
sidebar.find('.active').addClass('inactive');
sidebar.find('.active').removeClass('active');
$(this).removeClass('inactive');
$(this).addClass('active');
}
});