我正在我的应用程序中使用bootstrap Dropdown组件,如下所示:
<div class="btn-group">
<button class="btn">Please Select From List</button>
<button class="btn dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
<li><a tabindex="-1" href="#">Item I</a></li>
<li><a tabindex="-1" href="#">Item II</a></li>
<li><a tabindex="-1" href="#">Item III</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#">Other</a></li>
</ul>
</div>
我想将所选项目显示为btn标签。换句话说,将“Please Select From List”替换为已选择的列表项(“Item I”,“Item II”,“Item III”)。
答案 0 :(得分:146)
据我所知,您的问题是您想通过点击链接文字来更改按钮的文字,如果是这样,您可以试试这个:http://jsbin.com/owuyix/4/edit
$(function(){
$(".dropdown-menu li a").click(function(){
$(".btn:first-child").text($(this).text());
$(".btn:first-child").val($(this).text());
});
});
根据你的评论:
当我通过ajax调用填充列表项<li>
时,这对我不起作用。
因此您必须使用.on()
jQuery方法将事件委托给最近的静态父级:
$(function(){
$(".dropdown-menu").on('click', 'li a', function(){
$(".btn:first-child").text($(this).text());
$(".btn:first-child").val($(this).text());
});
});
此处事件委托给静态父$(".dropdown-menu")
,但您也可以将事件委托给$(document)
,因为它始终可用。
答案 1 :(得分:133)
针对Bootstrap 3.3.4进行了更新:
这将允许您为每个元素提供不同的显示文本和数据值。它也将坚持选择。
JS:
$(".dropdown-menu li a").click(function(){
$(this).parents(".dropdown").find('.btn').html($(this).text() + ' <span class="caret"></span>');
$(this).parents(".dropdown").find('.btn').val($(this).data('value'));
});
HTML:
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Dropdown
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><a href="#" data-value="action">Action</a></li>
<li><a href="#" data-value="another action">Another action</a></li>
<li><a href="#" data-value="something else here">Something else here</a></li>
<li><a href="#" data-value="separated link">Separated link</a></li>
</ul>
</div>
答案 2 :(得分:26)
我能够略微提高Jai的工作答案,如果你有一个以上的按钮下拉,并且有一个非常好的演示文稿,可以使用bootstrap 3:
按钮代码
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Option: <span class="selection">Option 1</span><span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Option 1</a></li>
<li><a href="#">Option 2</a></li>
<li><a href="#">Option 3</a></li>
</ul>
</div>
JQuery代码段
$(".dropdown-menu li a").click(function(){
$(this).parents(".btn-group").find('.selection').text($(this).text());
$(this).parents(".btn-group").find('.selection').val($(this).text());
});
我还在“选择”类中添加了5px页边距。
答案 3 :(得分:7)
这个适用于同一页面中的多个下拉列表。 此外,我在所选项目上添加了插入符号:
$(".dropdown-menu").on('click', 'li a', function(){
$(this).parent().parent().siblings(".btn:first-child").html($(this).text()+' <span class="caret"></span>');
$(this).parent().parent().siblings(".btn:first-child").val($(this).text());
});
答案 4 :(得分:6)
这是我的这个版本,我希望可以节省你的一些时间:)。
jQuery PART:
$(".dropdown-menu").on('click', 'li a', function(){
var selText = $(this).children("h4").html();
$(this).parent('li').siblings().removeClass('active');
$('#vl').val($(this).attr('data-value'));
$(this).parents('.btn-group').find('.selection').html(selText);
$(this).parents('li').addClass("active");
});
HTML PART:
<div class="container">
<div class="btn-group">
<a class="btn btn-default dropdown-toggle btn-blog " data-toggle="dropdown" href="#" id="dropdownMenu1" style="width:200px;"><span class="selection pull-left">Select an option </span>
<span class="pull-right glyphiconglyphicon-chevron-down caret" style="float:right;margin-top:10px;"></span></a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
<li><a href="#" class="" data-value=1><p> HER Can you write extra text or <b>HTLM</b></p> <h4> <span class="glyphicon glyphicon-plane"></span> <span> Your Option 1</span> </h4></a> </li>
<li><a href="#" class="" data-value=2><p> HER Can you write extra text or <i>HTLM</i> or some long long long long long long long long long long text </p><h4> <span class="glyphicon glyphicon-briefcase"></span> <span>Your Option 2</span> </h4></a>
</li>
<li class="divider"></li>
<li><a href="#" class="" data-value=3><p> HER Can you write extra text or <b>HTLM</b> or some </p><h4> <span class="glyphicon glyphicon-heart text-danger"></span> <span>Your Option 3</span> </h4></a>
</li>
</ul>
</div>
<input type="text" id="vl" />
</div>
答案 5 :(得分:6)
这个单一的jQuery函数可以满足您的所有需求。
$( document ).ready(function() {
$('.dropdown').each(function (key, dropdown) {
var $dropdown = $(dropdown);
$dropdown.find('.dropdown-menu a').on('click', function () {
$dropdown.find('button').text($(this).text()).append(' <span class="caret"></span>');
});
});
});
答案 6 :(得分:5)
您需要在open
<div class="btn-group open">
并在li
添加class="active"
答案 7 :(得分:4)
根据@Kyle的答案进一步修改为 $ .text()返回精确的字符串,因此插入标签按字面打印,而不是作为标记打印,以防有人想要在下拉列表中保持插入符完整。
$(".dropdown-menu li").click(function(){
$(this).parents(".btn-group").find('.btn').html(
$(this).text()+" <span class=\"caret\"></span>"
);
});
答案 8 :(得分:3)
我已更正页面上多个下拉菜单的脚本
$(function(){
$(".dropdown-menu li a").click(function(){
var item = $(this);
var id = item.parent().parent().attr("aria-labelledby");
$("#"+id+":first-child").text($(this).text());
$("#"+id+":first-child").val($(this).text());
});
});
答案 9 :(得分:1)
这似乎是个长期问题。我们想要的只是在输入组中实现一个select标签。但是引导程序不会这样做:https://github.com/twbs/bootstrap/issues/10486
诀窍就是添加&#34; btn-group&#34; class to parent div
HTML:
<div class="input-group">
<div class="input-group-btn btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Product Name <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="#">A</a></li>
<li><a href="#">B</a></li>
</ul>
</div>
<input type="text" class="form-control">
<span class="input-group-btn">
<button class="btn btn-primary" type="button">Search</button>
</span>
</div>
JS:
$(".dropdown-menu li a").click(function(e){
var selText = $(this).text();
$(this).parents('.input-group').find('.dropdown-toggle').html(selText+' <span class="caret"></span>');
});
答案 10 :(得分:0)
点击该项后,添加一些数据属性,例如 data-selected-item ='true',然后重新获取。
为您点击的 li元素尝试添加data-selected-item ='true',然后
$('ul.dropdown-menu li[data-selected-item] a').text();
在添加此属性之前,您只需删除列表中现有的数据选定项。希望这会对你有所帮助
有关jQuery中数据属性用法的信息,请参阅jQuery data
答案 11 :(得分:0)
例如:
HTML:
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
<BtnCaption>Select item</BtnCaption>
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">Option 1</a></li>
<li><a href="#">Option 2</a></li>
<li class="disabled"><a href="#">Option 3</a></li>
</ul>
</div>
我使用新元素BtnCaption更改仅按钮的文字。
粘贴到 $(document).ready(function () {}
以下文字
JavaScript的:
$(".dropdown-menu li:not(.disabled) a").click(function () {
$(this).closest(".dropdown").find(".btn BtnCaption").text($(this).text()));
});
:not(.disabled)
不允许使用已禁用的菜单项
答案 12 :(得分:0)
我不得不把一些显示的javascripts放在&#34; document.ready&#34;码。否则他们没有工作。很多人可能很明显,但不适合我。因此,如果您正在测试那个选项。
<script type="text/javascript">
$(document).ready(function(){
//rest of the javascript code here
});
</script>
答案 13 :(得分:0)
使用多个下拉菜单的另一种简单方法(引导程序4)
$('.dropdown-item').on('click', function(){
var btnObj = $(this).parent().siblings('button');
$(btnObj).text($(this).text());
$(btnObj).val($(this).text());
});