我将Bootstrap与jquery一起使用来创建包含下拉菜单和按钮的动态表。 我想获取按钮单击时在jquery中选择的下拉菜单的值。
下面是我的代码
<table class="table table-bordered">
<tbody>
{% for item in items %}
<tr>
<td>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Select
</button>
<ul class="dropdown-menu" role="menu" id="options" onchange="selectFromDropDown(this.value)">
<li><a id="weekly" selected>Option 1</a></li>
<li><a id="biweekly">Option 2</a></li>
<li><a id="monthly">Option 3</a></li>
</ul>
</div>
</td>
<td>
<form data-toggle="validator" role="form" >
<input type="submit" value="Update" class="btn btn-xs btn-block" id="update">
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
下面是jquery
$('#update').click(function(){
alert($('#options option:selected').html())
});
当我在上面的代码中运行时,它返回“ undefined”。
答案 0 :(得分:1)
如果您在控件中使用select
,则不必为它编写代码。只需对您的代码做些改动即可。
$('#update').click(function(){
alert($('#options').val());
});
或者,如果您使用的是ul, li
,请像这样更改您的jquery代码。
$('#update').click(function(){
alert($('#options .selected').text())
});
答案 1 :(得分:0)
尝试一下:
$('#update').on('click', function () {
alert($('#options').find('[selected]').html());
});
首先,我使用了on
函数,因为click
函数会触发实际点击(IIRC)。
然后,我使用选择的[selected]
CSS,即attribute selector;结合find
(在子级中搜索选择器),它应该可以工作。
说完所有这些,就无法通过单击下拉菜单上的 selected 属性来更改-除非您使用JavaScript-因为只有options
使用selected属性。 / p>
$('#options a').on('click', function () {
$('#options a').removeAttr('selected');
$(this).attr('selected', true);
});
上面的代码是一种变通方法,可让您的下拉列表与我的上面的代码正常工作。
实际上,它所做的就是从 all #option a
元素中删除所选属性,然后将其提供给被单击的属性。
JSFiddle
为了简洁起见,我使用了JSFiddle而不是摘要,因为这个答案已经很长了,并且可以防止重复提问者的代码...
答案 2 :(得分:0)
可能您正在寻找这个。如果是下拉列表
$('#update').click(function(){
alert($('#options').find(":selected").text());
});
如果其无序列表,您可以使用此
$('#update').click(function(){
alert($('#options > li > a:selected').html());
});
答案 3 :(得分:0)
您的jquery搜索在click事件中不正确。您正在#option标识符内寻找选项标签,并且您的html引用了无序列表标签。根据您的html进行选定元素的搜索
$('#update').click(function(){
alert($('#options > li > a:selected').html())
});
答案 4 :(得分:0)
首先,您的for
循环正在复制元素id
。 id
属性必须是唯一的,否则任何过滤操作(包括附加侦听器)将仅返回第一个元素,并且您的操作将无效。在示例中,我针对其他选择器。您可以 通过在下拉列表“ options
”中使用重复项作为value
的替代品来使用它,只要您不直接定位它们即可。
然后,由于存在多行,因此您必须找到下拉列表在哪一行中,以便可以获取相应的值。您可以使用closest
和find
来做到这一点。
此外,如果您有很多行,则也应该考虑使用event delegation,这样可以减少监听器的连接。我已经使用了这种解决方案。
现在,由于下拉列表不是真实的select
,因此它不会响应change
事件,因此我也使用委托提供了自己的选择功能。由于它是锚,因此无法使用:selected
伪选择器,因此必须检查是否存在该属性。
$('table').on('click', '.btn-update', function(evt) {
$clicked = $(this).closest('tr').find('.dropdown-menu a[selected]')
console.log($clicked.text())
// You can get the emulated 'value' too
console.log($clicked.attr('id'))
// Cancel the 'button' default action
evt.preventDefault()
});
$('table').on('click', '.dropdown-menu', function(evt) {
// Find the 'selected' anchor inside this dropdown and remove the attribute
$(evt.currentTarget).find('a[selected]').removeAttr('selected')
// Add the attribute to the clicked one
$(evt.target).attr('selected', true)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-bordered">
<tbody>
<tr>
<td>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Select
</button>
<ul class="dropdown-menu" role="menu" id="options">
<li><a id="weekly">Option 1</a></li>
<li><a id="biweekly" selected>Option 2</a></li>
<li><a id="monthly">Option 3</a></li>
</ul>
</div>
</td>
<td>
<form data-toggle="validator" role="form">
<input type="submit" value="Update" class="btn btn-xs btn-block btn-update" id="update">
</form>
</td>
</tr>
<tr>
<td>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Select
</button>
<ul class="dropdown-menu" role="menu" id="options">
<li><a id="weekly" selected>Option 1</a></li>
<li><a id="biweekly">Option 2</a></li>
<li><a id="monthly">Option 3</a></li>
</ul>
</div>
</td>
<td>
<form data-toggle="validator" role="form">
<input type="submit" value="Update" class="btn btn-xs btn-block btn-update" id="update">
</form>
</td>
</tr>
</tbody>
</table>