2015-07-25 1 views
1

Так у меня есть форма, как это:Используйте каждый() после serializeArray() форма

<form> 
    <input name="name" value="A. Hitchcock"> 
    <input name="email" value="[email protected]"> 
    <input name="name" value="Q. Tarantino"> 
    <input name="email" value="[email protected]"> 
    ... 
</form> 

очень простой. Это позволяет мне получать name и email от моих клиентов. С jQuery у меня есть кнопка, позволяющая добавить в нашу форму больше клиентов (name и email).

Мне нужно повторить эти Данные по каждым изменениям формы, поэтому я использовал этот код:

$('.form-horizontal').on('change','input', function(){ 
    var dataArray = $('#list-items').serializeArray(); 
}); 

С serializeArray() я могу сериализовать все мои ДАННЫЕ в массив.

Моя проблема в том, чтобы показать эти ДАННЫЕ, как это с помощью этого serializeArray():

  • A. Hitchcock имеет этот адрес электронной почты: [email protected].
  • Q. Tarantino имеет этот адрес электронной почты: [email protected].

Любая помощь в том, как это сделать, пожалуйста?

ответ

1

предложить Вам завернуть пары в родительском и игнорировать, используя serializeArray()

<form> 
    <div class="person"> 
     <input name="name[]" value="A. Hitchcock"> 
     <input name="email[]" value="[email protected]"> 
    </div> 
    <div class="person"> 
     <input name="name[]" value="Q. Tarantino"> 
     <input name="email[]" value="[email protected]"> 
    </div> 
</form> 

Затем отображают значения из групп:

var res = $('.person').map(function() { 
    var $inputs = $(this).find('input'); 
    return '<li>' + $inputs.eq(0).val() + ' has this email address :' + $inputs.eq(1).val() + '</li>' 
}).get(); 

$('#list').append(res.join('')); 

DEMO

Объекты, созданные serializeArray(), будут выглядеть так:

[{ 
    "name": "name[]", 
    "value": "A. Hitchcock" 
}, { 
    "name": "email[]", 
    "value": "[email protected]" 
}, { 
    "name": "name[]", 
    "value": "Q. Tarantino" 
}, { 
    "name": "email[]", 
    "value": "[email protected]" 
}] 

Так разборе тех, будут по-прежнему требуют индексов спаривания, чтобы получить имя и адрес электронной anyaway

Если вы действительно хотите сделать это, Вы можете использовать for цикл:

var res= []; 
for(var i=0; i< arr.length; i=i+2){ 
    res.push('<li>' + arr[i].value + ' has this email address :' + arr[i+1].value + '</li>'); 
} 
+0

Выглядит отлично. Один вопрос для вас: как насчет выбора вместо ввода как второго элемента? – teamo

+0

, если это выбор ... есть псевдоселектор ': input', который ищет все элементы управления формой ... простое изменение http://api.jquery.com/input-selector/ – charlietfl

1

, не меняя ничего в вашем HTML-коде вы можете отделить names и emails в двух Arrays, как и следующий код, и просто объединить их, как вы хотите, в простой for цикл:

Полный Js:

$('.form-horizontal').on('change','input', function(){ 
    var names = $("form input[name='name']").serializeArray(); 
    var emails = $("form input[name='email']").serializeArray(); 

    for(var i=0;i<=names.length;i++){ 
     alert(names[i].value+" has this email address : "+emails[i].value); 
    } 
}); 

Надеется, что поможет вам.

+0

хорошее мышление ... появляется вы поняли, что я пытался указать до – charlietfl

+0

Да, это правда, спасибо за ваш совет :). –