这让我很难过。我可以轻松地将多选的值作为数组获取,并将其传递给ajax请求:
<select id="countries" class="multiselect" multiple="multiple" name="countries[]">
<option value="AFG">Afghanistan</option>
<etc>
...
$countries_input = $("#countries");
var countries = $countries_input.val();
$.ajax({
data: {
country : countries,
...
},
...
});
但我找不到任何等效方法来获取具有多个选择的复选框的值。明显的东西不起作用:
<input type="checkbox" name="check[]" value="foo1"/>foo1<br/>
<input type="checkbox" name="check[]" value="foo2"/>foo2<br/>
...
var bar = $('input:checkbox[name=check]').val(); // undefined
var bar = $('input:checkbox[name=check[]]').val(); // also undefined
var bar = $('input:checkbox[name=check]:checked').val(); // also undefined
有什么想法吗?感谢。
答案 0 :(得分:7)
没有内置的jQuery功能。你必须自己做。您可以通过简单的循环轻松完成:
var vals = []
$('input:checkbox[name="check[]"]').each(function() {
vals.push(this.value);
});
或者如果你只想要检查的那些:
var vals = []
$('input:checkbox[name="check[]"]').each(function() {
if (this.checked) {
vals.push(this.value);
}
});
或者您可以使用map
和get
:
var vals = $('input:checkbox[name="check[]"]').map(function() {
return this.value;
}).get();
或者如果你只想要检查的那些:
var vals = $('input:checkbox[name="check[]"]').map(function() {
return this.checked ? this.value : undefined;
}).get();
附注1:jQuery需要属性值选择器中的值(上面的那种)始终在引号中,尽管在撰写本文时尽管记录它仍然松懈。这是一个jQuery的东西,但在这种情况下你也需要CSS(CSS2 Reference | CSS3 Reference),因为你的值包括[]
,它对没有引号的值无效在CSS中。 (在CSS中,如果没有引号,则值必须为identifiers。)
附注2:注意我在上面的迭代器函数中使用了this.value
来获取input
的值,而不是$(this).val()
。它几乎只是一种风格的东西,从各方面来看都不比另一种更好。 this.value
更直接,如果你完全了解DOM(并且每个网络程序员都应该),那就非常清楚了。但是,当然,虽然完全可靠的跨浏览器与复选框和大多数其他input
元素,但它不是可靠的跨浏览器与一些其他表单字段(例如select
框)。 {j}密集型应用程序中$(this).val()
更为惯用,您不必担心this
是input
还是select
。是的,它增加了开销,但如果你没有成千上万的,那就不重要了。
答案 1 :(得分:4)
.map()
方法,请介绍我最喜欢的方法之一。手册页上的示例还包含复选框。 .get()
方法可用于将jQuery集合转换为对象。.map():通过函数传递当前匹配集中的每个元素, 生成一个包含返回值的新jQuery对象。
[]
:name=check\[\]]
。 修改:当然,如果您使用标准属性选择器语法,则没有问题:name="check[]"
这样的东西就足够了:
var checkedValues = $('input:checkbox[name="check[]"]:checked').map(function () {
return $(this).val();
}).get();
答案 2 :(得分:0)
我认为serialize()
和serializeArray()
数组会起作用,但显然它们只适用于选择的孩子。
最糟糕的情况我只会使用map()
来获取数组
country : $("your input selector").map(function() {return $(this).val();})