2014-10-08 63 views
0

我是新来的jQuery和希望用它来保持当前所选菜单项(因为它看起来在其悬停状态。)获得了jQuery做项目“中选择”

我的警报被解雇,所以功能似乎开始。当它没有被注释掉时,第一个声明,即黄色背景色的作品。但是,我似乎无法让其他人影响菜单。 “选择”类似乎不起作用。换句话说,我在菜单中选择的项目以黄色突出显示,直到页面更改,然后返回到默认颜色。我已经尝试了很多.selected类的名称组合,包括.selected。

jQuery的

<script> 
$(document).ready(function() { 
    $('.nav ul li').click(function() { 
    alert("Go!"); 
    /*$('a', this).css("background-color","yellow");*/ 
    $('a', this).removeClass('selected'); 
    $('a', this).addClass('selected'); 
    }); 
}); 
</script> 

HTML

<div class="nav"> 
<ul class="nav ul"> 
     <li class="selected"> <a href="index.php">HOME</a> </li> 
     <li> <a href="about.php">ABOUT</a> </li> 
     <li> <a href="k-5.php">K-5 PROJECTS<strong class="caret"></strong></a></li> 
     <li> <a href="wishlist.php">WISH LIST</a> </li> 
     <li> <a href="history.php">ART HISTORY</a> </li> 
     <li> <a href="funlinks.php">FUN LINKS</a> </li> 
     <li> <a href="contact.php">CONTACT</a> </li>  
</ul> 
</div> 

CSS

.nav ul li a:active { 
    background-color: #FFB01C; 
} 

.nav ul li a:hover { 
    background-color: #FFB01C; 
} 

.nav ul li .selected { 
    background-color: #FFB01C; 
} 
+3

当你点击一个链接,该链接被跟随的和新的页面被加载。该样式正在应用,但是在加载新页面时会丢失样式。另外,为什么要删除这个类,然后立即用'$('a',this).removeClass('selected'); $('a',this).addClass('selected');'? – j08691 2014-10-08 15:32:17

+0

我试图删除之前选择的项目并将其应用于当前项目。 – eric 2014-10-08 17:46:32

+0

我明白你想要做什么,但是你的页面只会遵循正常的链接并加载一个新页面。如果您希望选择“粘贴”,则需要使用cookie存储选择内容。 – j08691 2014-10-08 18:20:00

回答

1

要确保这个工程无论是使用此代码

<script> 
$(document).ready(function() { 
    $('.nav ul li').click(function() { 
    // the following code 
    event.preventDefault(); 
    alert("Go!"); 
    /*$('a', this).css("background-color","yellow");*/ 
    $('a', this).removeClass('selected'); 
    $('a', this).addClass('selected'); 
    }); 
}); 
</script> 

这将防止页面重新加载。或者,您应该保存用户在缓存或Cookie内部单击的列表项,然后根据该数据更改样式。

正如j08691在评论中所说的,您的更改正在应用。但是,只要新文档(新页面)加载到浏览器中就立即更改。你也提到这个问题。

我已经做了一些改动,在这里你可以对其进行测试http://jsfiddle.net/gjsb398g/

Selecter jQuery中已变更为

$('.nav li') 

既然你有应用到列表本身的类,所以$('.nav ul li')无法正常工作。

上面已经描述了第二个变化。该页面正在加载,因为您的代码中有超链接。这必须将文档移动到下一个文档(加载下一个文档),以防止它发生,我添加了代码。现在它可以工作。

+0

可能想为您的答案添加一些更多细节。为什么页面重新加载?你有什么改变?为什么这解决了这个问题? – 2014-10-08 15:35:27

+1

@JamesDonnelly,谢谢先生,:)我已经添加了细节。:) – 2014-10-08 15:41:46

+0

谢谢,但是当我在jsfiddle中尝试了这些更改时,我无法确定它是否正常工作,因为它正在登录页面。 – eric 2014-10-08 17:51:25

0

我认为这可以解决您的要求:

<script> 
$(document).ready(function() { 
    var loc = window.location; 
    var pathName = location.pathname.substring(location.pathname.lastIndexOf("/") + 1); 
    if(pathName=="") 
    { 
      $(".nav a").each(function(){      
      var at=$(this).prop("href"); 
      if(at=="index.php") 
      { 
       $(this).parent().addClass("selected");     
      } 
     }); 
    } 
    else 
    { 
      $(".nav a").each(function(){       
      var at=$(this).prop("href"); 
      if(at==pathName) 
      { 
       $("li.selected").removeClass("selected"); 
       $(this).parent().addClass("selected");    
      } 
     }); 
    } 
}); 
</script> 
+0

谢谢!它的工作原理除了现在我的链接不工作。菜单正常工作,但页面不会更改。另外,我在主页定位标记中添加了class =“selected”,所以在索引页面加载时会突出显示。希望这不会破坏任何东西。 – eric 2014-10-08 17:58:23