想象一下,有x
个选择字段(x
的值不是一成不变的)。我想使用jQuery(或香草JavaScript)获取每个选择字段的selected选项的值。
我的方法:
var cars = $(".select").find("option:selected").val();
$(".select").on("click", function() {
$(".show-value").html("value: " + cars);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<div class="show-value"></div>
即给出第一个val()
。仅-我想要一个数组。有趣的事实-当我将val()
更改为text()
时,它将毫无问题地拾取3个“文本值”。为什么会这样?
答案 0 :(得分:1)
首先,您仅在页面加载时从找到的第一个选定option
(即从第一个select
)中读取值。这就是为什么值永远不会改变的原因。在change
上触发select
事件时,您需要读取该值。
第二,不要在click
元素上使用select
事件。如上所述,请使用change
。这是出于可访问性的原因。只会在进行更改时触发,而不是在每次打开/关闭选项列表时触发。
第三,您可以直接在val()
上调用select
以获取其值。您无需使用find('option:selected')
。
最后,如果您想要一个select
值的数组,可以使用map()
来构建它:
var $selects = $(".select");
$selects.on("change", function() {
var cars = $selects.map(function() {
return $(this).val();
}).get();
$('.show-value').text(cars.join(', '));
console.log(cars);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<div class="show-value"></div>
答案 1 :(得分:0)
尝试一下:您可以在选择框的更改事件上创建值并推送到地图中
$(".select").on("change", function() {
var cars = $(".select").find("option:selected").map(function() {
return $(this).val();
}).get().join();
$(".show-value").html("value: " + cars);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<div class="show-value"></div>
答案 2 :(得分:0)
$(".select").on("change", function() {
$(".show-value").html("value: " + $(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<select class="select" name="test" id="">
<option value="0">Ford</option>
<option value="1">Honda</option>
<option value="2">BMW</option>
</select>
<div class="show-value"></div>
答案 3 :(得分:0)
您也可以使用它。
$( ".select" ).each(function( index ) {
console.log( index + ": " + $( this ).val() );
});
//this will return all of the dropdown selected values