2016-12-22 20 views
1

フォームフィールドから多次元配列を作成しようとしています。これをjQueryでループして、その場で計算を実行できます。フォームフィールドから多次元配列を作成する

フォームは追加出席者/参加者のオプションを削除しており、各出席者は、私はフィールド名とそのような配列を作成しようとしていますので、3つの入力を持っている私が収集するためのjQueryで、次の使用しています

attendees[0][name] = 'Name' 
attendees[0][email] = 'Email' 
attendees[0][type] = 'Normal' 

この配列は、フォーム内の入力の変更イベントです。

var values = $("input[name='attendees[]']").map(function() { 
    return $(this).val(); 
}).get(); 
console.log(values); 

alertはちょうどので、私はそれが働いていますが、私のバイオリンから見ることができるようにされていることを知っているにかかわらず、出席者にあるものの配列は常に空であるフィールド。

https://jsfiddle.net/b84s07x4/

答えて

3

あなたは非常に単純代わりに各行の最初の入力、tbody tr要素にmap()を使用し、必要なフォーム要素を取得するfind()を使用してこれを達成することができます。

classをフォーム要素に読み込ませることでセレクタを簡略化することもできます。そうでない場合は、name属性を使用してセレクタ文字列をハックして、その中に含まれている引用符をエスケープする必要があります。それはすぐに厄介になります。

これを試してみてください:これは私が必要とするもの、部分的にやるようだが、出席者を削除する場合に、第2のオブジェクトがまだある

function calculate() { 
    var attendees = $('.attendee-table > tbody > tr').map(function() { 
     return { 
      name: $(this).find('.attendee-name').val(), 
      email: $(this).find('.attendee-email').val(), 
      type: $(this).find('.attendee-type').val() 
     } 
    }).get(); 
    console.log(attendees); 
} 

Working example

+0

。また、後続の出席者には出席者タイプが定義されていません。 –

+0

タイプの問題は私の間違いでした。私はHTML文字列で引用符を見逃しました。また、その時点でオブジェクトを更新する場合は、削除イベントハンドラで 'calculate()'をもう一度呼び出す必要があることにも注意してください。ここに挙げられている問題の両方を扱う別のフィドルがあります:https://jsfiddle.net/b84s07x4/4/ –

+0

これは治療法です。あなたの答えを受け入れたものとしてどのようにマークするのですか? –

関連する問題