使用jquery获取数组的值

时间:2012-07-12 17:29:50

标签: javascript jquery arrays forms

假设我有这种形式:

    <form method="post" name="b" >
<table>
    <tr>
        <td>Field A</td>
        <td><input type='text' name='field[0][a]' id='field[0][a]'></td>
        <td>Field B</td>
        <td><textarea name='field[0][b]' id='field[0][b]'></textarea></td>
        <td><button>remove</button></td>
    </tr>
</table>
</div>
<div id="container"></div>
<button id="mybutton">add form</button>

<div align="center">
<p><button onClick="dadosFormulario()" value="Registar" name="registar">Registo</button></p>
</div>
</form>

我有一个jquery函数,它复制了我点击“添加表单”按钮时的输入。所以,关于这一点,我试图用jquery的.val()方法保存输入的值。

所以,如果我有这样的输入:

<input type='text' name='teste' id='teste'>

我知道这个:

var v = $('#teste').val();

我可以收到她的价值。但是,如果我有一个输入数组,这是我的情况,因为我可以复制表单的字段,我如何从以下输入中获取多个值?

<input type='text' name='field[0][a]' id='field[0][a]'>
<input type='text' name='field[0][b]' id='field[0][b]'>

var v = $('#field [iterator] [a]')。val();不起作用,导致'未定义'。

jquery函数,我无法使用val()从输入中获取值;给出undefined:

$countForms = 1;

    (function($){

          $.fn.addForms = function(idform){

                        var myform = "<table>"+
                         "  <tr>"+
                         "     <td>Field A ("+$countForms+"):</td>"+
                         "     <td><input type='text' name='field\\["+$countForms+"\\]\\[a\\]'></td>"+
                         "     <td>Field B ("+$countForms+"):</td>"+
                         "     <td><textarea name='field["+$countForms+"]['b']'></textarea></td>"+
                         "     <td><button>remove</button></td>"+
                         "  </tr>"+
                         "</table>";


                        if(idform=='mybutton'){

                            myform = $(myform);
                            $("button", $(myform)).click(function(){ $(this).parent().parent().remove(); });
                            $(this).append(myform);
                            $countForms++;
                        }


          };
    })(jQuery);

    $(function(){
        $("#mybutton").bind("click", function(e){
        e.preventDefault();
        var idform=this.id;

            if($countForms<3){
                $("#container").addForms(idform);
            }       
        });
    });

4 个答案:

答案 0 :(得分:3)

在jQuery选择器中使用方括号,我们应该使用转义字符在控件的id中包含方括号;

<强> Live Demo

iterator = 0;
$('#field\\['+iterator +'\\]\\[a\\]').val();​

答案 1 :(得分:1)

为输入添加一个类并执行此操作

jQuery(document).ready(function($){
  $('.inputs').each(function(index, object){
    console.log($(object).val());
  });
});

在您的代码中,您需要在此处进行更改:

var v = $('#field[iterator][a]').val();

为:

var v = $('#field\\['+iterator+'\\]\\[a\\]').val();

答案 2 :(得分:1)

字符“[”在jquery选择器中不是中性的:

$('#field[0][a]')表示:“选择具有id”字段“的项目,并且还有一个名为”0“的属性,以及另一个名为”a“的属性”

你可以:

  • 要么改变您的字段ID,要么:id="field_0_a",以便$('#field_0_a')正常工作,
  • 或按名称选择您的项目:$('[name="field[0][a]"]')
  • 或者像Adil说的那样

答案 3 :(得分:0)

问题是您必须转义特殊字符,如下所示:

$('[id="field[' + iterator + '][b]"]').val();

$('#field\\[' + iterator + '\\]\\[b\\]').val();
demo