散列/锚点网址需要显示隐藏的jquery / css div

时间:2014-02-25 05:02:09

标签: javascript jquery css drop-down-menu tabs

这个问题让我疯了,虽然我肯定答案是盯着我,因为我经常是个白痴。

我根据此代码制作了一个标签页,它使用了CSS和jQuery。 http://www.mkyong.com/jquery/how-to-use-css-and-jquery-to-hide-and-show-tab-content/

标签内容也需要通过下拉CSS菜单访问。你可以在这里看到它。 http://jsfiddle.net/4N63A/

这是我正在使用的代码。

$('.subSection-tabs > li > a').click(function(event){
event.preventDefault();//stop browser to take action for clicked anchor

//get displaying tab content jQuery selector
var active_tab_selector = $('.subSection-tabs > li.selected > a').attr('href');                 
//find actived navigation and remove 'selected' css
var actived_nav = $('.subSection-tabs > li.selected');
actived_nav.removeClass('selected');

//add 'selected' css into clicked navigation
$(this).parents('li').addClass('selected');

//hide displaying tab content
$(active_tab_selector).removeClass('selected');
$(active_tab_selector).addClass('hide');

//show target tab content
var target_tab_selector = $(this).attr('href');
$(target_tab_selector).removeClass('hide');
$(target_tab_selector).addClass('selected');
 });

//checks for hash tag in URL to display correct div 
var hash = $.trim( window.location.hash );
if (hash) $('.subSection-tabs > li > a[href$="'+hash+'"]').trigger('click');

//force browser URL to update with the selected hash tag
$("a[href^=#]").on("click", function(e) {
    e.preventDefault();
    history.pushState({}, "", this.href);
    //show/hide div from drop down
    var active_nav_selector = $('ul > li.navHash > a').attr('href');
    $(active_nav_selector).removeClass('selected');
    $(active_nav_selector).addClass('hide');
    var target_nav_selector = $(this).attr('href');
    $(target_nav_selector).removeClass('hide');
    $(target_nav_selector).addClass('selected');
});

因此,当用户单击Dropdown链接然后单击“Tab 2”时,浏览器中的URL将更改为#tab2,但不会显示选项卡2 div和内容。从“显示选项卡2”选项卡更改它可以按预期工作,并在浏览器窗口中放置相应的哈希(#tab2)。我需要下拉导航的链接才能正常工作,以便用户可以使用后退按钮。您可以点击Google链接查看我的意思。

噢,善良,我希望我能正确解释这一点。基本上,下拉菜单还需要显示和隐藏正确的div。我的脚本可以在/script.js上查看

提前非常感谢。我非常感谢任何帮助,因为我疯了。如果我能烤蛋糕,我会的。我做了很棒的莫吉托。你可以假装吃它们。

更新:我将show / hide类函数添加到我的Jsfiddle函数(e)中,现在下拉列表显示正确的div但不隐藏前一个。我很亲密,但到目前为止!

1 个答案:

答案 0 :(得分:0)

您正在使用history.pushState,它为您提供了#tab2 但是看看提供的js,没有任何逻辑来显示div内容 像

$("a[href^=#]").on("click", function(e) {
e.preventDefault();
history.pushState({}, "", this.href);
    // show the tab content with the same name (use id since they're the same) as href~    
});

同样作为一个好习惯 - 将你的jquery和脚本放在身体下面 (这有两个目的,  1.首先加载样式,以便更快地向用户显示页面  2.你的jquery脚本可以检查“文档”是否确实准备好并显示

(似乎你的dropbox不喜欢运行jquery库) - 所以我建议你将来使用github页面,codepen或者jsfiddle用js演示一些东西

添加了JSFIDDLE: http://jsfiddle.net/denistsoi/UD4Hx/

似乎工作正常,但即使这样,这也没有显示history.pushstate正在工作〜