Javascript 返回带有jquery.val()的数组

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

我有一组复选框,只想将选中的复选框连接到查询字符串中,但出于某种原因,val()只返回第一个复选框。jQueryAPI文档提到selects可以从.val()函数返回一个数组,我可以通过原型或jQuery插件获得同样的输入行为吗

这是我的密码:

$('.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();