Получить значения массива с помощью jquery

Допустим, у меня есть эта форма:

    <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, которая дублирует входные данные, которые у меня есть, когда я нажимаю кнопку «добавить форму». Итак, в связи с этим я пытаюсь сохранить значения входов с помощью метода .val() jquery.

Итак, если у меня есть ввод, подобный этому:

<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(); дает неопределенное:

$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);
            }       
        });
    });

person user1511579    schedule 12.07.2012    source источник


Ответы (4)


Квадратные скобки используются в селекторе jQuery, и мы должны использовать escape-символы, чтобы включить квадратную скобку в идентификатор элемента управления;

Демо

iterator = 0;
$('#field\\['+iterator +'\\]\\[a\\]').val();​
person Adil    schedule 12.07.2012
comment
еще одна вещь, о входных данных, которые я сгенерировал с помощью jquery? я не могу объявить их так? ‹input type='text' name='field[+$countForms+]['a']'› ? - person user1511579; 12.07.2012
comment
Я так не думаю, отправленный вами статус, если он в html, вы не можете использовать такую ​​​​переменную javascipt. Если у вас возникнут какие-либо проблемы на пути, вы всегда можете задать вопрос, чтобы попросить решения. - person Adil; 12.07.2012
comment
если это не очень грубо с моей стороны, задавать так много вопросов, я объявил массив в функции для сохранения данных из входных данных: var dadosFormulario=new Array(); while(i‹iterador){ dadosFormulario = $('#field\['+i +'\]\[a\]').val(); dadosFormulario = $('#field\['+i +'\]\[b\]').val(); оповещение (dadosFormulario); я++; } Теперь, как я могу использовать функцию jquery .each() для печати всех данных в массиве, чтобы убедиться, что все в порядке? - person user1511579; 12.07.2012
comment
Нет проблем, это определенно поможет api.jquery.com/jQuery.each и api.jquery.com/each - person Adil; 12.07.2012
comment
Не туда :/ Ссылки, которые вы мне дали, показывают мне массивы с заранее объявленным содержимым. У меня я не знаю их длины, и мне трудно понять, так как это многомерный массив. - person user1511579; 12.07.2012

Символ «[» не является нейтральным в селекторах jquery:

$('#field[0][a]') означает: «выберите элементы, которые имеют идентификатор «поле», а также имеют атрибут с именем «0» и другой атрибут с именем «a» "

Ты сможешь :

  • либо измените свой способ присвоения идентификатора вашим полям, например: id="field_0_a", и, таким образом, $('#field_0_a') будет работать правильно,
  • или выберите товары по названию: $('[name="field[0][a]"]')
  • или делай как сказал Адиль
person LeGEC    schedule 12.07.2012
comment
LeGec, я сделал, как сказал Адиль, и это работает для ввода в html-коде. Однако, как я уже сказал, у меня есть еще одна проблема, связанная с сгенерированными входными данными в другой функции jquery (я добавлю функцию в основной пост). у меня они объявлены следующим образом ‹input type='text'name='field[+$countForms+]['a']'›, но в результате получается undefined - person user1511579; 12.07.2012

Добавьте класс к входам и сделайте это

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

В вашем коде вам нужно изменить здесь:

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

to:

var v = $('#field\\['+iterator+'\\]\\[a\\]').val();
person GTSouza    schedule 12.07.2012
comment
У меня похожая проблема, но с функцией jquery, которую я разместил в конце основного сообщения, если вы могли бы помочь, я был бы признателен. Спасибо. - person user1511579; 12.07.2012
comment
Попробуйте изменить this.id; в $(this).attr('id'); - person GTSouza; 12.07.2012
comment
Возможно, это то, что вам нужно: on/11443961#11443961" title="jquery динамически добавил данные элемента формы, которые не отправляются в базу данных, когда пользователь включен"> stackoverflow.com/questions/11443783/ - person GTSouza; 12.07.2012
comment
мне не хватало идентификатора атрибута в функции jquery, это решено. благодарю вас - person user1511579; 12.07.2012

Проблема в том, что вам нужно экранировать специальные символы, подобные следующим:

$('[id="field[' + iterator + '][b]"]').val();
или
$('#field\\[' + iterator + '\\]\\[b\\]').val();
демонстрация

person Ricardo Alvaro Lohmann    schedule 12.07.2012