2016-08-02 2 views
0

私は3つのフィールドを持つHTMLフォームを持っています。 。。私は私のgetFormData($form)メソッドを使用してこれまでの作品JSONオブジェクト(としてそれらをシリアライズしたいしかし、今、私は自分のフォームでのinputText /値なしですべてのフィールドを除外したい空の値を持たないjsonとしてフォームをシリアル化

これは私のフォームをシリアライズし、JSONオブジェクトとして保存します:

function getFormData($form){ 
    var unindexed_array = $form.serializeArray(); 
    var indexed_array = {}; 

    $.map(unindexed_array, function(n, i){ 
     indexed_array[n['name']] = n['value']; 
    }); 

    return indexed_array; 
} 

これは私が値なしでフィールドをフィルタ処理しようとした方法である:

var form = $("#bulk-edit-fut-account-form :input[value!='']"); 
console.log(JSON.stringify(form)); 
var formData = getFormData(form); 

私のHTMLフォーム:

<form id="bulk-edit-fut-account-form" class="form-horizontal" novalidate="novalidate"><div class="form-group"><label class="col-sm-3 control-label">Id<span class="asterisk">*</span></label><div class="col-sm-9"><input id="bulkAccountIds" type="text" required="" readonly="" value="118 119 " data-id="[{&quot;Id&quot;:118},{&quot;Id&quot;:119}]" class="form-control valid" aria-required="true"></div></div><div class="form-group"><label class="col-sm-3 control-label">Max. Requests/minute</label><div class="col-sm-9"><input type="number" name="RequestsPerMinute" placeholder="Type maximum amount of reqs/min..." class="form-control valid"></div></div><div class="form-group"><label class="col-sm-3 control-label">Request Threshold</label><div class="col-sm-9"><input type="number" name="Threshold" placeholder="Type fastest timeframe for 1 request in seconds..." class="form-control valid"></div></div><div class="form-group"><label class="col-sm-3 control-label">Comment</label><div class="col-sm-9"><textarea name="Comment" rows="5" class="form-control"></textarea></div></div></form> 

問題:上記のコードを使用して

、それはまだ空のフィールドをシリアライズします(私はそれを避けたいです)。結果は{ RequestsPerMinute: '121', Threshold: '', Comment: '' }です。値なしでフィールドをシリアル化するのを避けるにはどうすればよいですか?

+0

は、あなたが削除してくださいすることができ除外され、 ':'あなた 'VARフォームから= $( "#bulk-edit-fut-account-form:input [value!= '']"); '? – Santi

+0

@TylerRoper実際には正しいだろう。これで、テキストエリアである「コメント」フィールドが無視され、空の値フィールドはフィルタリングされません。私のアイデアが望みどおりに機能しないように見えます。 – kentor

+0

私の答えをチェックし、それが動作するかどうか教えてください。 – Santi

答えて

0

はこれを試してみてくださいをそれを正常に呼び出すには、すべてを含めると、あなただけが

var json = getFormData(form); 

、あなたは空の入力をしたくないとき、あなただけの

var json = getFormData(form, true); 

を行うと、彼らは

+0

問題は私が問題を適切に記述しなかったことだと思います。これは入力テキストボックスなので、「属性」値ではありません。このテキストボックスが空であるかどうかを確認したい。それが空の場合=>フィルタ – kentor

+0

空のテキストボックスと値のないテキストボックスの違いは何ですか?上記の例では、「テキストボックスに値がない場合、またはテキストボックスに空白の値がある場合は除外します」と表示されます。 – Santi

+0

私はあなたの解決策を試しました。コンテンツを持っているかどうかにかかわらず、すべてのフィールドをフィルタリングします。 – kentor

0

あなたはfilter可能性があり、.val()が空の要素を削除します。

var form = $(); //Initialize empty jQuery object 

    //Iterate through all inputs, textareas 
    $('#bulk-edit-fut-account-form input, #bulk-edit-fut-account-form textarea').each(function() { 

     //Add to jQuery object if not empty 
     if ($(this).val().length) { 
      form = form.add($(this)); 
     } 

    }) 

    console.log(JSON.stringify(form)); 
    var formData = getFormData(form); 
+0

答えをありがとうが、私は空のフィールドをシリアル化する他の場所でもメソッドを使用します。より良い解決策がない場合、私はあなたの答えを試みます。 – kentor

1

ここで機能

function getFormData($form, no_empty) { 
    var unindexed_array = $form.serializeArray(); 
    var indexed_array = {}; 

    $.map(unindexed_array, function(n, i) { 
     indexed_array[n['name']] = n['value']; 
    }); 

    if (no_empty) { 
     $.each(indexed_array, function(key, value) { 
      if ($.trim(value) === "") delete indexed_array[key]; 
     }); 
    } 

    return indexed_array; 
} 

あなたがワン」を変更する一つの方法です:

$.map(unindexed_array, function(n, i){ 
    indexed_array[n['name']] = n['value']; 
}).filter(function() { 
    // will be removed from array if empty 
    return $(this).val(); 
}); 
+0

答えをありがとうが、私は空のフィールドをシリアル化する他の場所でもメソッドを使用します。より良い解決策がない場合、私はあなたの答えを試みます。 – kentor

関連する問題