更改菜单标题仅在第一次后发生
Changing menu title only happens after first time
我有一个 bootstrap 菜单。如果它是折叠的,我希望它有页面的名称,如果它是打开的,我希望它命名菜单。
现在我将其命名为 "Watch the Trailer"(假设在该页面上的位置)。
单击按钮时,更改标题有效,但仅在第一次后有效。这是为什么?
我的方法好吗?这是一个jsfiddle for convenience.
var menu_title = $(".so_menu_name").html();
$(".navbar button").on("click", function () {
var collapsed = $(".navbar button").hasClass("collapsed");
if (!collapsed) {
$(".so_menu_name").html(menu_title);
}
else {
$(".so_menu_name").html("Menu");
}
});
.nav.navbar-nav .nav-item {
float: none;
}
.nav.navbar-nav .nav-item+.nav-item {
margin-left: 0;
}
.nav.navbar-nav .nav-link {
padding: .25rem 0;
}
.nav.os_menu {
border-top: 2px solid rgba(255, 255, 255, .5);
border-bottom: 2px solid rgba(255, 255, 255, .5);
}
<div class="container">
<nav class="navbar navbar-dark bg-inverse">
<span class="so_menu_name">Watch the Trailer</span>
<button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#collapsingNavbar">+</button>
<div class="collapse navbar-toggleable-xs" id="collapsingNavbar">
<ul class="nav navbar-nav os_menu">
<li class="nav-item active">
<a class="nav-link" href="#">Watch the Trailer<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Screening & Events</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Synopsis</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">The Protagonist</a>
</li>
</ul>
</div>
</nav>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
试试这个:DEMO
我在按钮内添加文字。
<button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
Watch the Trailer +
</button>
我的建议是:
这些行的主要变化:
<div class="navbar-toggleable-xs collapse in" id="collapsingNavbar">
和:
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
<span class="so_menu_name">Watch the Trailer</span>
</button>
$(function () {
var menu_title = $(".so_menu_name").html();
$("button.navbar-toggler").on("click", function (e) {
e.preventDefault();
var collapsed = $(this).hasClass("collapsed");
if (collapsed) {
$(".so_menu_name").text(menu_title);
}
else {
$(".so_menu_name").text("Menu");
}
});
});
.nav.navbar-nav .nav-item {
float: none;
}
.nav.navbar-nav .nav-item+.nav-item {
margin-left: 0;
}
.nav.navbar-nav .nav-link {
padding: .25rem 0;
}
.nav.os_menu {
border-top: 2px solid rgba(255,255,255,.5);
border-bottom: 2px solid rgba(255,255,255,.5);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
<div class="container">
<nav class="navbar navbar-dark bg-inverse">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
<span class="so_menu_name">Watch the Trailer</span>
</button>
<div class="navbar-toggleable-xs collapse in" id="collapsingNavbar">
<ul class="nav navbar-nav os_menu">
<li class="nav-item active">
<a class="nav-link" href="#">Watch the Trailer<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Screening & Events</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Synopsis</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">The Protagonist</a>
</li>
</ul>
</div>
</nav>
</div>
我分析的可能是插件有问题。对于第一次点击,它不会添加或删除名为 collapse
.
的 class
如果你使用它的属性aria-expanded
你可能会解决这个问题。
var menu_title = $(".so_menu_name").html();
$(".navbar button").on("click", function () {
// var collapsed = $(".navbar button").hasClass("collapsed");
if ($(this).attr('aria-expanded') == "true") {
$(".so_menu_name").html(menu_title);
}
else {
$(".so_menu_name").html("Menu");
}
});
我有一个 bootstrap 菜单。如果它是折叠的,我希望它有页面的名称,如果它是打开的,我希望它命名菜单。
现在我将其命名为 "Watch the Trailer"(假设在该页面上的位置)。 单击按钮时,更改标题有效,但仅在第一次后有效。这是为什么?
我的方法好吗?这是一个jsfiddle for convenience.
var menu_title = $(".so_menu_name").html();
$(".navbar button").on("click", function () {
var collapsed = $(".navbar button").hasClass("collapsed");
if (!collapsed) {
$(".so_menu_name").html(menu_title);
}
else {
$(".so_menu_name").html("Menu");
}
});
.nav.navbar-nav .nav-item {
float: none;
}
.nav.navbar-nav .nav-item+.nav-item {
margin-left: 0;
}
.nav.navbar-nav .nav-link {
padding: .25rem 0;
}
.nav.os_menu {
border-top: 2px solid rgba(255, 255, 255, .5);
border-bottom: 2px solid rgba(255, 255, 255, .5);
}
<div class="container">
<nav class="navbar navbar-dark bg-inverse">
<span class="so_menu_name">Watch the Trailer</span>
<button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#collapsingNavbar">+</button>
<div class="collapse navbar-toggleable-xs" id="collapsingNavbar">
<ul class="nav navbar-nav os_menu">
<li class="nav-item active">
<a class="nav-link" href="#">Watch the Trailer<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Screening & Events</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Synopsis</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">The Protagonist</a>
</li>
</ul>
</div>
</nav>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
试试这个:DEMO
我在按钮内添加文字。
<button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
Watch the Trailer +
</button>
我的建议是:
这些行的主要变化:
<div class="navbar-toggleable-xs collapse in" id="collapsingNavbar">
和:
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
<span class="so_menu_name">Watch the Trailer</span>
</button>
$(function () {
var menu_title = $(".so_menu_name").html();
$("button.navbar-toggler").on("click", function (e) {
e.preventDefault();
var collapsed = $(this).hasClass("collapsed");
if (collapsed) {
$(".so_menu_name").text(menu_title);
}
else {
$(".so_menu_name").text("Menu");
}
});
});
.nav.navbar-nav .nav-item {
float: none;
}
.nav.navbar-nav .nav-item+.nav-item {
margin-left: 0;
}
.nav.navbar-nav .nav-link {
padding: .25rem 0;
}
.nav.os_menu {
border-top: 2px solid rgba(255,255,255,.5);
border-bottom: 2px solid rgba(255,255,255,.5);
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
<div class="container">
<nav class="navbar navbar-dark bg-inverse">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar">
<span class="so_menu_name">Watch the Trailer</span>
</button>
<div class="navbar-toggleable-xs collapse in" id="collapsingNavbar">
<ul class="nav navbar-nav os_menu">
<li class="nav-item active">
<a class="nav-link" href="#">Watch the Trailer<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Screening & Events</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Synopsis</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">The Protagonist</a>
</li>
</ul>
</div>
</nav>
</div>
我分析的可能是插件有问题。对于第一次点击,它不会添加或删除名为 collapse
.
如果你使用它的属性aria-expanded
你可能会解决这个问题。
var menu_title = $(".so_menu_name").html();
$(".navbar button").on("click", function () {
// var collapsed = $(".navbar button").hasClass("collapsed");
if ($(this).attr('aria-expanded') == "true") {
$(".so_menu_name").html(menu_title);
}
else {
$(".so_menu_name").html("Menu");
}
});