无法将嵌套的表输入元素放入jQuery数组中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将嵌套的表输入元素放入jQuery数组中相关的知识,希望对你有一定的参考价值。

我知道这不应该是这么难,但我需要另一双眼睛,因为我的头撞在墙上。

我有一个带有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?

答案

这段代码:

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());
另一答案

答案不是100%直观,但我应该知道......

serializeArray()方法在收集元素时默认使用name:value对,而我收集的元素没有任何“名称”属性,只有id。添加名称后,将根据需要填充阵列。

以上是关于无法将嵌套的表输入元素放入jQuery数组中的主要内容,如果未能解决你的问题,请参考以下文章

将元素的所有文本放入数组jQuery中

使用键事件和 jquery 将文本放入输入元素

从 jQuery 集合中获取每个元素的属性值,放入数组中

Vuejs 无法推送到嵌套数组

jQuery与lodash($_)

jQuery:根据输入的第一个字母显示数组元素