我有一个引导下拉列表,它在悬停时打开(根据需要(,但我无法在单击时关闭它。具体来说,我希望在做出选择后关闭下拉列表。请问我该怎么做?请注意,所选内容反映在下拉列表文本中(这很好(,但下拉列表本身仍保持打开状态。
由于某种原因,我不明白我所说的下拉菜单,我的代码被附加,当您在运行下面的代码片段后全屏显示时出现,否则仅显示nav-bar header
。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<!--jquery -->
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<!-- bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<!--d3 -->
<script src='https://d3js.org/d3.v4.min.js'></script>
<style>
/*Show/hide dropdown menu on mouse hover*/
.dropdown:hover > .dropdown-menu {
display: block;
}
/*Styling on the navbar*/
.navbar-inverse {
background-color: #3d4a57;
border-color: #333;
}
.navbar-inverse .navbar-nav > li > a,
.navbar a.navbar-brand {
color: #fbfbfb;
text-decoration: none;
}
</style>
</head>
<body class="application" id="body">
<!-- main page container, holding the nav tabs and content -->
<div id="container">
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Some title</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown" id="myDropdown">
<a href="#" class="myDropdown dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
Select Data
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 1")'>Dataset 1</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 2")'>Dataset 2</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 3")'>Dataset 3</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav">
<li class="dropdown" id="dropdown-inefficiency">
<a href="#" class="dropdown-valueSetter dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
Intensity Value
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#" onclick='set_value("1.0")'>1.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("2.0")'>2.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("3.0")'>3.0</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container-fluid -->
</div>
</div>
<script>
function myDropdownSelector(x){
d3.select('.myDropdown').node().text = x + ' ';
$('.myDropdown').append("<span class='caret'></span>");
}
function set_value(x){
d3.select('.dropdown-valueSetter').node().text = 'Value: ' + x + ' '
$('.dropdown-valueSetter').append("<span class='caret'></span>");
}
</script>
</div>
</body>
</html>
你正在使用一个大脚本(d3.v4.min.js
(来为你做一些JavaScript中的下拉处理。如果您希望看到更具体的答案,请在将来提问时参考以下内容。
我尝试使用简单的jQuery根据您的要求使某些内容工作,结果是显示和隐藏某些下拉列表:
function myDropdownSelector(x) {
d3.select('.myDropdown').node().text = x + ' ';
$('.myDropdown').append("<span class='caret'></span>");
}
function set_value(x) {
d3.select('.dropdown-valueSetter').node().text = 'Value: ' + x + ' '
$('.dropdown-valueSetter').append("<span class='caret'></span>");
}
//Rather use jQuery DOM ready function to execute DOM manipulation over regular JavaScript
$(document).ready(function() {
$(".nav.navbar-nav .dropdown-menu").on("click", ".dropdown-item", function() {
$(".dropdown-menu").hide();
});
$(".nav.navbar-nav .dropdown > a#foo").hover(function() {
$(".dropdown-menu#bar").show();
});
$(".nav.navbar-nav .dropdown > a#alpha").hover(function() {
$(".dropdown-menu#beta").show();
});
});
/* Show/hide dropdown menu on mouse hover */
.dropdown:hover > .dropdown-menu {
display: block;
}
/* Styling on the navbar */
.navbar-inverse {
background-color: #3d4a57;
border-color: #333;
}
.navbar-inverse .navbar-nav > li > a,
.navbar a.navbar-brand {
color: #fbfbfb;
text-decoration: none;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://d3js.org/d3.v4.min.js"></script>
<div class="application" id="body">
<!-- main page container, holding the nav tabs and content -->
<div id="container">
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Some title</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown" id="myDropdown">
<a href="#" class="myDropdown dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" id="alpha">
Select Data
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="beta">
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 1")'>Dataset 1</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 2")'>Dataset 2</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 3")'>Dataset 3</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav">
<li class="dropdown" id="dropdown-inefficiency">
<a href="#" class="dropdown-valueSetter dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" id="foo">
Intensity Value
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="bar">
<li><a class="dropdown-item" href="#" onclick='set_value("1.0")'>1.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("2.0")'>2.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("3.0")'>3.0</a></li>
</ul>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container-fluid -->
</div>
</div>
</div>
</div>
JSFiddle
选择后,下拉列表将关闭。就您所要求的而言,这应该可以解决您的(客户端(问题。
您可以通过获取 ul tag 的引用并像这样调用 hide(( 函数来关闭下拉列表。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<!--jquery -->
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<!-- bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<!--d3 -->
<script src='https://d3js.org/d3.v4.min.js'></script>
<style>
/*Show/hide dropdown menu on mouse hover*/
.dropdown:hover > .dropdown-menu {
display: block;
}
/*Styling on the navbar*/
.navbar-inverse {
background-color: #3d4a57;
border-color: #333;
}
.navbar-inverse .navbar-nav > li > a,
.navbar a.navbar-brand {
color: #fbfbfb;
text-decoration: none;
}
</style>
</head>
<body class="application" id="body">
<!-- main page container, holding the nav tabs and content -->
<div id="container">
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Some title</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown" id="myDropdown">
<a href="#" class="myDropdown dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
Select Data
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="dataset">
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 1")'>Dataset 1</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 2")'>Dataset 2</a></li>
<li><a class="dropdown-item" href="#" onclick='myDropdownSelector("Dataset 3")'>Dataset 3</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav">
<li class="dropdown" id="dropdown-inefficiency">
<a href="#" class="dropdown-valueSetter dropdown-toggle" data-toggle="dropdown" role="button"
aria-haspopup="true" aria-expanded="false">
Intensity Value
<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="value">
<li><a class="dropdown-item" href="#" onclick='set_value("1.0")'>1.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("2.0")'>2.0</a></li>
<li><a class="dropdown-item" href="#" onclick='set_value("3.0")'>3.0</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container-fluid -->
</div>
</div>
<script>
function myDropdownSelector(x){
d3.select('.myDropdown').node().text = x + ' ';
$('.myDropdown').append("<span class='caret'></span>");
$("#dataset").hide();
}
function set_value(x){
d3.select('.dropdown-valueSetter').node().text = 'Value: ' + x + ' '
$('.dropdown-valueSetter').append("<span class='caret'></span>");
$("#value").hide();
}
</script>
</div>
</body>
</html>
请注意函数 myDropdownSelector 和 set_value。
这是它在jsfiddle中的工作版本