如何获取具有array-name的输入标记的已检查值并将此值发送到服务器

时间:2013-12-10 13:07:35

标签: javascript jquery ajax forms

我有一个HTML格式:

<input name="arrayname[]" type="checkbox" value="1">
<input name="arrayname[]" type="checkbox" value="2">
<input name="arrayname[]" type="checkbox" value="3">
<input name="arrayname[]" type="checkbox" value="4">

请注意,输入标记的name属性设置为arrayname[]。 如果我点击一些复选框并提交表单,那么我会进入$ _POST全局数组:

["arrayname"]=>
    array(2) {
    [0]=>
        string(1) "1"
    [1]=>
        string(1) "3"
    }

我希望使用jQuery从输入标记中获取检查值,以便通过ajax将它们发送到服务器。我发明了javascript函数:

function myGetValue(fieldName)
{
    var value;
    value = $('input[name='+fieldName+']').val();
    return value;
}

但是这个函数适用于没有方括号的简单名称,比如'simplename'。例如:

<input name="simplename" type="text" value="my text">

<input name="arrayname[]" type="checkbox" value="1">
<input name="arrayname[]" type="checkbox" value="2">
<input name="arrayname[]" type="checkbox" value="3">
<input name="arrayname[]" type="checkbox" value="4">

如果我alert(myGetValue('simplename'))那么它就可以了,我得到了输入字段的值。如果我alert(myGetValue('arrayname'))那么它就不行了,我得到'未定义'。 必须使用什么功能?我想获得名为'arrayname'的输入标签的值,并通过ajax将其发送到服务器。我不能使用序列化或json。我希望得到像$ _POST一样的数组,即使使用ajax也是如此。 您可以在实例here

中查看我的代码

我只想发送选中的值。 我的代码通过ajax发送数据:

var fieldName = 'simplename';
var fieldValue = myGetValue(fieldName);
var formaData = new FormData();
formaData.append(fieldName, fieldValue);
$.ajax({
    type: 'POST',
    data: formaData,
    processData: false,
    contentType: false,
});

5 个答案:

答案 0 :(得分:1)

您无法将名称定义为Javascript数组对象。这是一个常规的字符串。

答案 1 :(得分:1)

您可以使用.map()获取已选中复选框元素的值,如下所示 - 它将返回一个数组

function myGetValue(fieldName) {
    var value = $('input[name="' + fieldName + '"]:checked, input[name="' + fieldName + '"]:not(:checkbox, :radio)').map(function () {
        return this.value
    }).get();
    return value;
}

演示:Fiddle

答案 2 :(得分:0)

试试这个

function myGetValue(fieldName)
{
    var value;
    value = $('input[name="'+fieldName+'[]"]').val();
    //or
    //value = $('input[name="'+fieldName+'[]:checked"]').val();
    return value;
}

alert(myGetValue('arrayname'));

您的字段名称为arrayname[],因此您必须提供[]以及名称,并且选择器应为$('input["name="arrayname[]"]')

Live Demo

<强>更新

$(document).ready(function() {
function myGetValue(fieldName)
{
    var values =  [];   
    $('input[name="'+fieldName+'[]"]:checked').each(function(i) {
        values[i] = $(this).val();
    });
    return values.join(",");
}

   alert(myGetValue('arrayname'));
});

Live Demo

答案 3 :(得分:0)

试试这个:

var checked_boxes = [];
$('input[name^=arrayname]:checked').each(function(){
    checked_boxes[checked_boxes.length] = $(this).val();
});
alert(checked_boxes);

答案 4 :(得分:0)

我没有看到它,所以我猜测你正在寻找以下行为:

check your console

function myGetValues(fieldName) {
    return $('input[name=' + fieldName.replace(/(\[)|(\])/g, function (m) {
        return "\\" + m;
    }) + ']').map(function(){return this.value}).get();
}

console.log(myGetValues('arrayname[]'));