2017-06-15 7 views
0

カスタムキー/値のペア形式でフォームをシリアル化する必要があります。カスタムキーと値のペアでフォームをシリアル化する方法は?

<form name="ltq_frm" id="ltq_frm"> 
    <table class="table" id="licenses_to_quote"> 
    <thead> 
     <tr> 
     <th>License ID</th> 
     <th>Quote ID</th> 
     <th>Agreement Type</th> 
     <th>Customer Site</th> 
     </tr> 
    </thead> 
    <tbody id="licenses_to_quote_body"> 
     <tr data-id="96"> 
     <td> 
      96 
      <input type="hidden" name="license_id" value="96"> 
     </td> 
     <td> 
      <input class="hidden-select2-96" type="hidden" name="quote_id" value="249"> 249 
     </td> 
     <td>Percentage Support</td> 
     <td>Frito-Lay, Inc.</td> 
     </tr> 
     <tr data-id="100"> 
     <td> 
      100 
      <input type="hidden" name="license_id" value="100"> 
     </td> 
     <td> 
      <input class="hidden-select2-100" type="hidden" name="quote_id" value=""> 
     </td> 
     <td>Percentage Support</td> 
     <td>Frito-Lay, Inc.</td> 
     </tr> 
    </tbody> 
    </table> 
</form> 

<button id="subm"> 
    Click 
</button> 

そして、これは私がそれをシリアル化しています方法です:

$(function() { 
    $('#subm').click(function() { 
    var sA = $('#ltq_frm').serializeArray(); 
    var s = $('#ltq_frm').serialize(); 

    console.log(sA); 
    console.log(s); 
    }); 
}); 

これは「作業」ですが、私は、出力として4つの値の配列を取得していますこれは私のHTMLコードがどのように見えるかです。上記の値は、フォーム上の隠し要素、license_idquote_idとして挙げたものから来て

[ 
    96 => 249, 
    100 => 
] 

:上記の例を使用

[ 
    'license_id' => 'quote_id' 
] 

:私のような何かを取得したいと思います。

私はhereをチェックしていましたが、私の値を必要なキー/値のペアに変換する方法がわかりませんでした。

This is jsFiddle私はあなたが必要な場合に備えて働いていました。

注:あなたはより良い提案を持っているか、私はそれを得る私は先に行く

+0

私はこれらの値がどこから来るのかを教えなければならないと思います。'96 => 249'が必要ですが、' 96'はデータ属性にあり、ある値とクラス名の一部に、この値がどこから得られたのかは重要ですか? – adeneo

+1

そうですね - > https://jsfiddle.net/kehxzq1L/3/ – adeneo

+0

@adeneoはい、あなたも投票をします;) – ReynierPM

答えて

1
手動で、2つの入力を取得し、各行を地図

var result = $('#ltq_frm tbody tr').map(function() { 
    var inp = $('input', this), o = {}; 

    o[inp.first().val()] = inp.last().val(); 
    return o; 
}).get(); 

FIDDLE

ように、キーとしての第1の値として第2を使用することができ

1

別の何かを与える必要があるので、もしこれは開発中のコードです。あなたはそれを行うには、次のようにカスタムコードが必要になります。

var finalObj = { }; 
$.each(​$('form')​.serializeArray()​, function() { 
    finalObj[this.name] = this.value; 
})​; 

console.log(finalObj); 

スニペット

var finalObj = { }; 
 
$.each($('form').serializeArray(), function() { 
 
    finalObj[this.name] = this.value; 
 
}); 
 

 
console.log(finalObj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="ltq_frm" id="ltq_frm"> 
 
    <table class="table" id="licenses_to_quote"> 
 
    <thead> 
 
     <tr> 
 
     <th>License ID</th> 
 
     <th>Quote ID</th> 
 
     <th>Agreement Type</th> 
 
     <th>Customer Site</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody id="licenses_to_quote_body"> 
 
     <tr data-id="96"> 
 
     <td> 
 
      96 
 
      <input type="hidden" name="license_id" value="96"> 
 
     </td> 
 
     <td> 
 
      <input class="hidden-select2-96" type="hidden" name="quote_id" value="249"> 249 
 
     </td> 
 
     <td>Percentage Support</td> 
 
     <td>Frito-Lay, Inc.</td> 
 
     </tr> 
 
     <tr data-id="100"> 
 
     <td> 
 
      100 
 
      <input type="hidden" name="license_id[]" value="100"> 
 
     </td> 
 
     <td> 
 
      <input class="hidden-select2-100" type="hidden" name="quote_id[]" value=""> 
 
     </td> 
 
     <td>Percentage Support</td> 
 
     <td>Frito-Lay, Inc.</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</form>

更新:をカスタム方法を取得するには、私はまだそれを変更する必要がありますさらに。あなたの質問では、コードにはいくつかの矛盾があります。私が訂正したのは以下の通りです:

  • license_id[]からlicense_idです。
  • quote_id[]~quote_id

1つの規約に従ってください。

var finalObj = { }; 
 
var lastLID = ""; 
 
$.each($('form').serializeArray(), function() { 
 
    if (this.name == "license_id") 
 
    lastLID = this.value; 
 
    else (this.name == "quote_id") 
 
    finalObj[lastLID] = this.value; 
 
}); 
 

 
console.log(finalObj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="ltq_frm" id="ltq_frm"> 
 
    <table class="table" id="licenses_to_quote"> 
 
    <thead> 
 
     <tr> 
 
     <th>License ID</th> 
 
     <th>Quote ID</th> 
 
     <th>Agreement Type</th> 
 
     <th>Customer Site</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody id="licenses_to_quote_body"> 
 
     <tr data-id="96"> 
 
     <td> 
 
      96 
 
      <input type="hidden" name="license_id" value="96"> 
 
     </td> 
 
     <td> 
 
      <input class="hidden-select2-96" type="hidden" name="quote_id" value="249"> 249 
 
     </td> 
 
     <td>Percentage Support</td> 
 
     <td>Frito-Lay, Inc.</td> 
 
     </tr> 
 
     <tr data-id="100"> 
 
     <td> 
 
      100 
 
      <input type="hidden" name="license_id" value="100"> 
 
     </td> 
 
     <td> 
 
      <input class="hidden-select2-100" type="hidden" name="quote_id" value=""> 
 
     </td> 
 
     <td>Percentage Support</td> 
 
     <td>Frito-Lay, Inc.</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</form>

+0

これは私が探しているものではないキー 'license_id'が' name = "license_id"の値になり、値 'quote_id'が' name = "quote_id"の値になる例を見てください。これは明確ですか? – ReynierPM

+0

@ReynierPM私はすでに理解していました。更新された答えを確認してください。あなたはあなたが望むものを手に入れました。 –

+0

@ReynierPM新しい回答を受け入れた理由は何ですか?ちょうど好奇心の仲間。 ':)'ちょうどあなたが期待していたものとは違う答えを返すのは好奇心旺盛です。 –

関連する問題