Jquery获取输入数组字段

abi*_*iku 69 jquery

我在这里发现了类似的问题,但对我来说没有任何作用.

有如下输入:

<input type="text" value="2" name="pages_title[1]">
<input type="text" value="1" name="pages_title[2]">
Run Code Online (Sandbox Code Playgroud)

试图让这些领域像:

$('input[name="pages_title[]"]')
Run Code Online (Sandbox Code Playgroud)

但有空结果:(

如何获得所有领域?我只能这样$('input[name="pages_title[1]"]')

97l*_*ave 97

使用带选择器开头

$('input[name^="pages_title"]').each(function() {
    alert($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

jsfiddle的例子

注意:与@epascarello一致认为更好的解决方案是在元素中添加一个类并引用该类.


Dem*_*tic 30

这通常适用于Checkboxes和Radio按钮......但是,每个名称应该相同.

<input type="text" value="2" name="pages_title[]">
<input type="text" value="1" name="pages_title[]">

var x = $('input[name="pages_title[]"]').val();
Run Code Online (Sandbox Code Playgroud)

这是"假设"以逗号分隔值获取所有字段.从来没有尝试过文本框,所以不能保证.

正如@John评论的那样:迭代它们. $('input[name="pages_title[]"]').each(function() { var aValue = $(this).val(); });

编辑:不仅如此,你只需回答OP问题,有时你需要教他们更好的方法.(对不起,如果这听起来很傲慢)

评论:将输入定义为

<input type="text" value="1" name="pages_title[1]">
<input type="text" value="2" name="pages_title[2]">
Run Code Online (Sandbox Code Playgroud)

打破数组,每个输入都有一个唯一的名称,因此,它不再是一个数组.

  • 要迭代每一个,使用`$('input [name ="pages_title []"]').each(function(){var aValue = $(this).val();});` (3认同)
  • 你不应该有`[1]`,`[2]`,`[3]`,这就是重点. (3认同)
  • @Dementic但这完全合法.你可以有更多的维度name ="page_tile [1] [name]"和name ="page_title [2] [name]"所以你需要支持[1]等 (3认同)
  • -1这不仅是合法的,而且当我有一个与字段数组相关的可变数量的字段时,它是绝对必须的,并且不保证每个字段的顺序或包含.我*必须能够提供我提交后可以依赖的唯一ID. (3认同)
  • @Dss - 它是合法的,但命名来代表一个数组,`[1]`代表一个不同的数组然后`[2]` (2认同)

小智 22

使用map方法我们可以获得存储在数组中的输入值.

var values = $("input[name='pages_title[]']").map(function(){return $(this).val();}).get();
Run Code Online (Sandbox Code Playgroud)


epa*_*llo 13

您需要使用带选择器启动

var elems = $( "[name^='pages_title']" );
Run Code Online (Sandbox Code Playgroud)

但更好的解决方案是在元素中添加一个类并引用该类.它是一个更快速查找的原因.

  • 不,它不好玩......因为`^ =`比类选择器慢很多.它必须解析字符串并检查匹配.我不知道你对'name ="pages_titles"`的意思 (2认同)

Lim*_*isa 13

将输入名称放在单引号之间,以便将括号[]视为字符串

var multi_members="";
$("input[name='bayi[]']:checked:enabled").each(function() {
    multi_members=$(this).val()+","+multi_members;
});
Run Code Online (Sandbox Code Playgroud)


Gre*_* R. 9

您可以为输入文本框提供类名,如下所示:

<input type="text" value="2" name="pages_title[1]" class="pages_title">
<input type="text" value="1" name="pages_title[2]" class="pages_title">
Run Code Online (Sandbox Code Playgroud)

并迭代如下:

$('input.pages_title').each(function() {
    alert($(this).val()); 
});
Run Code Online (Sandbox Code Playgroud)


Tho*_*ini 7

我认为最好的方法是使用Propper Form并使用jQuery.serializeArray.

<!-- a form with any type of input -->
<form class="a-form">
    <select name="field[something]">...</select>
    <input type="checkbox" name="field[somethingelse]" ... />
    <input type="radio" name="field[somethingelse2]" ... />
    <input type="text" name="field[somethingelse3]" ... />
</form>

<!-- sample ajax call -->
<script>
$(document).ready(function(){
    $.ajax({
        url: 'submit.php',
        type: 'post',
        data: $('form[name="a-form"]).serializeArray(),
        success: function(response){
            ...
        }
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

这些值将以PHP格式提供$_POST['field'][INDEX].