通过jQuery检索已检查输入框值的更好方法?

时间:2009-09-25 19:54:08

标签: javascript jquery

我有几个复选框和一个假提交按钮来发出AJAX请求:

<form>
    <input type="checkbox" value="1"/>
    <input type="checkbox" value="2" checked="checked"/>
    <input type="checkbox" value="3"/>
    <input type="checkbox" value="4" checked="checked"/>
    <input type="button" onclick="return mmSubmit();"/>
</form>

在mmSubmit()方法中,我想检索已选择的值数组。这是我目前正在做的事情。

mmSubmit = function() {
    var ids = [];
    $('input[type=checkbox]:checked');.each(function(index) {
        ids.push($(this).attr('value'));
    });
    // ids now equals [ 2 , 4 ] based upon the checkbox values in the HTML above
    return false;
};

我想知道jQuery中是否存在用于将值检索到数组中的简写方法,或者我的内容是否已经是最优的。

3 个答案:

答案 0 :(得分:2)

我认为这可以通过地图完成。请尝试以下方法..

mmSubmit = function() {
    var ids = $('input[type=checkbox]:checked').map(function(){
       return $(this).val();
    }).get();
    // ids now equals [ 2 , 4 ] based upon the checkbox values in the HTML above
    return false;
};

看看:jQuery Traversing/Map

答案 1 :(得分:0)

您可以使用.val()代替.attr('value')。

$。serializeArray()也可以做你想做的事情(http://docs.jquery.com/Ajax/serializeArray)。

答案 2 :(得分:0)

这需要一些优化,但通常是正确的方式。我的变种:

mmSubmit = function () {
    var ids = [];
    $('input[type=checkbox]').each(function () {
        if (this.checked) {
            ids[ids.length] = this.value;
        }
    });
    return ids;
};

它快一点。