1

我是 JQuery 的新手,我有一个关于 addClass() 的问题。我花了一些时间试图让这个工作,但似乎我做错了什么。我用 HTML 和引导程序创建了一个顶级菜单。我假设访问者会首先登陆我的 index.php,所以我为我的 index.php 创建了 class="active"。然后,如果他们单击顶部菜单上的任何其他链接(例如关于我们),那么 class="active" 将添加到 index.php 的“li”选项卡中并从“li”选项卡中删除 class="active"。

下面是我的 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 的新手,所以我希望我能向你们学习。谢谢你!

4

3 回答 3

2

单击链接时,它会将浏览器带到一个全新的页面,该页面会启动一个全新的 javascript 环境,并且您对当前页面所做的任何操作都不会转移到新加载的页面。

因此,当前页面上的活动类可能会被更改,但随后会加载一个全新的页面,该页面不会从第一页继承任何内容(例如,它从头开始)。加载新页面后,第一页中的代码将不再起作用。

您只需将活动类编码到每个单独的页面中(因为每个页面都知道它是什么页面),或者有一组通用的 JS 在页面加载时根据 URL 设置活动类,以便在页面加载。


此外,您可能不需要非活动课程。默认 CSS 状态可以表示非活动外观,活动类可以应用 CSS 覆盖以显示活动状态。

于 2013-10-13T01:59:07.680 回答
0

这不起作用,因为当有人点击另一个链接时,他们会被重定向到另一个页面。但是,您的标题并不真正知道点击了哪个链接,也不知道它在哪个页面上。您需要让您的标题知道您是哪个页面。这有意义吗?

于 2013-10-13T02:02:17.383 回答
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');
     }
 });
于 2013-10-13T02:20:12.270 回答