0

そんなに難しいことではないのはわかっていますが、頭を壁にぶつけているので、もう 1 組の目が必要です。

次のような ID を持つ NESTED テーブルがあります。

<table id="dwMeasurements_0">
<tbody>
    <tr id="tDim_0">
        <td colspan="2">
        <strong>Total Wall Length: </strong>
        </td>
        <td>
        <input type="text" id="Msr_0_T1" class="dwInput" value="0"> Inches and </td>
        <td>
        <input type="text" id="Msr_0_T2" class="dwInput" style="margin-left:2px;" value="0"> 16ths</td>
    </tr>
    <tr>
        <td colspan="4">
        <hr>
        </td>
    </tr>
    <tr id="lDim_0_0">
        <td>
            <select id="ItemType_0_0">
                <option>Item Type</option>
                <option>Door</option>
                <option>Window</option>
                <option>Other</option>
            </select>
        </td>
        <td>
        <label>L-Dim: </label>
        </td>
        <td>
        <input type="text" id="Msr_0_0_A1" class="dwInput" value="0"> Inches and </td>
        <td>
        <input type="text" id="Msr_0_0_A2" class="dwInput" style="margin-left:2px;" value="0"> 16ths</td>
    </tr>
//MORE ROWS HERE//
</table>

テキスト入力をシリアル化し、要素を選択するための私のjQueryは次のとおりです。

var MeasureRowCount = $("[id^='MeasureRow_']").length; //Populated by counting parent rows 
var htmlOutput = '';
var rowInputs,rowSelects;
for(var r=0;r < MeasureRowCount;r++){
    rowInputs = $('#dwMeasurements_'+r+' :input').serializeArray();
    rowSelects = $('#dwMeasurements_'+r).find('select').serializeArray();

            $.each(rowSelects, function(i, eSelectItem){
        esName = eSelectItem.name;
        esVal = eSelectItem.value;                

                     htmlOutput += //name and value from above with markup
            }
}

// htmlOutput to DOM here with markup

入力要素を収集するために複数の方法を試しましたが、どれも機能しません。配列は空になります。テーブルがネストされていても、ネストされたテーブル ID を直接呼び出しているので機能するはずではありませんか?

4

2 に答える 2

1

このコード:

for(var r=0;r < MeasureRowCount;r++){
    rowInputs = $('#dwMeasurements_'+r+' :input').serializeArray();

rowInputsループするたびに の値を上書きします。

jQuery.merge代わりにそれらを組み合わせて使用​​してみてください:

var rowInputs=[],rowSelects=[];
for(var r=0;r < MeasureRowCount;r++){
    $.merge(rowInputs, $('#dwMeasurements_'+r+' :input').serializeArray());
于 2013-02-19T15:07:13.543 に答える
0

答えは 100% 直感的ではありませんでしたが、知っておくべきでした...

serializeArray()メソッドname:valueは、要素を収集するときにペアを使用するようにデフォルト設定されており、収集していた要素には「名前」属性がなく、id のみがありました。名前を追加すると、必要に応じて配列が設定されました。

于 2013-02-19T19:18:28.030 に答える