Javascript 返回带有jquery.val()的数组
我有一组复选框,只想将选中的复选框连接到查询字符串中,但出于某种原因,val()只返回第一个复选框。jQueryAPI文档提到selects可以从.val()函数返回一个数组,我可以通过原型或jQuery插件获得同样的输入行为吗 这是我的密码:Javascript 返回带有jquery.val()的数组,javascript,jquery,forms,Javascript,Jquery,Forms,我有一组复选框,只想将选中的复选框连接到查询字符串中,但出于某种原因,val()只返回第一个复选框。jQueryAPI文档提到selects可以从.val()函数返回一个数组,我可以通过原型或jQuery插件获得同样的输入行为吗 这是我的密码: $('.boxes input:checked'); // [ <input type="checkbox" value="val1">, <input type="checkbox" value="val2">, <inp
$('.boxes input:checked');
// [ <input type="checkbox" value="val1">, <input type="checkbox" value="val2">, <input type="checkbox" value="val3"> ]
$('.boxes input:checked').val();
// "val1"
val
为具有multiple
属性的select
元素返回选定值的数组,对于其他元素,它返回集合中第一个元素的值。您可以使用map
方法:
var values = $('.boxes input:checked').map(function() {
return this.value;
}).get();
您还可以定义一种方法:
$.fn.vals = function() {
var first = this.get(0);
if ( this.length === 0 ) return [];
if ( first.tagName === 'SELECT' && first.multiple ) {
return this.val();
}
return this.map(function() { return this.value; }).get();
}
// ...
var values = $('.boxes input:checked').vals();
您的复选框没有相同的名称,因此jquery无法知道它们是否关联。仅凭我最初的直觉,
.val()
仅返回
元素的数组。我希望向.val()添加功能,而不是更改现有代码。这是真的,但是我想重载现有的val行为,以返回映射版本作为输入。我宁愿在原型级别解决这个问题,也不愿到处都有一堆映射函数。使它更具可读性。
$.fn.vals = function() {
var first = this.get(0);
if ( this.length === 0 ) return [];
if ( first.tagName === 'SELECT' && first.multiple ) {
return this.val();
}
return this.map(function() { return this.value; }).get();
}
// ...
var values = $('.boxes input:checked').vals();