表行上的直接jQuery $.each
循环。我对物体不太好,并且遇到了.push()
方法的困难。
我应该得到:
[{"buyerPoINPUT":"1234567"},{"jobINPUT":"Replace grommit"},{"shipMethodINPUT":"etc"}]
相反,我得到了:
[{"t1":"1234567"},{"t1":"Replace grommit"},{"t1":"etc"}]
为什么我得到重复的t1
变量名,而不是t1
var内容(id属性)?
HTML:
<div id="summaryTableDIV" class="b1">
<table id="summaryTable">
<thead>
<th id="buyerPoTH">PO NO.</th><th id="jobTH">JOB</th><th id="shipMethodTH">SHIPPING<br>METHOD</th><th id="shipTermsTH">SHIPPING<br>TERMS</th><th id="payTermsTH">PAYMENT<br>TERMS</th><th id="blankTH"></th>
</thead>
<tbody>
<td id="buyerPoTD" ><input type="text" id="buyerPoINPUT" value="1234567" /></td>
<td id="jobTD" ><input type="text" id="jobINPUT" value="Replace grommit" /></td>
<td id="shipMethodTD"><input type="text" id="shipMethodINPUT" value="Loomis or DHL" /></td>
<td id="shipTermsTD" ><input type="text" id="shipTermsINPUT" value="FOB Washington" /></td>
<td id="payTermsTD" ><input type="text" id="shipMethodINPUT" value="see below" /></td>
<td id="blankTD" ><input type="text" id="blankINPUT" value="Okay to proceed" /></td>
</tbody>
</table>
</div><!-- #summaryTableDIV -->
JS / JQ:
var objSumTbl = new Array();
$("#summaryTable > tbody > tr > td > input").each(function(){
var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
objSumTbl.push({
t1 : t2
});
});
alert( JSON.stringify(objSumTbl) );
答案 0 :(得分:2)
事实证明,在JavaScript中定义对象并不会将键/值对的关键部分解释为变量。这实际上是命名属性t1
而不是t1
变量的值。
然而, 可以单独创建对象,并使用该变量引用对象上的属性来定义该属性。像这样:
var objSumTbl = new Array();
$("#summaryTable > tbody > tr > td > input").each(function(){
var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
var newObj = {};
newObj[t1] = t2;
objSumTbl.push(newObj);
});
alert( JSON.stringify(objSumTbl) );
答案 1 :(得分:2)
当您使用对象表示法作为{key:value},&#39; key&#39;将始终被视为字符串常量而不是变量名称,您需要使用object [key_name_var]表示法。
这应该有效:
var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
var new_obj = {};
new_obj[t1] = t2;
objSumTbl.push(new_obj);
更新:根据我们在评论中的讨论,您希望的结果应如下所示:
{"buyerPoINPUT":"1234567","jobINPUT":"Replace grommit","shipMethodINPUT":"etc"}
然后你应该将objSumTbl定义为一个对象,并使用[key]表示法来设置循环内的值:
var objSumTbl = {};
$("#summaryTable > tbody > tr > td > input").each(function(){
var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
objSumTbl[t1] = t2;
});
alert( JSON.stringify(objSumTbl) );
要遍历对象内的所有值,请使用
Object.keys(objSumTbl)
获取objSumTbl中所有键的数组,然后对该数组执行for循环:
var keys = Object.keys(objSumTbl);
for(i=0;i<keys.length;i++){
console.log(objSumTbl[ keys[i] ]);
}
答案 2 :(得分:1)
那不是你如何制作一个对象属性变量
尝试这种方式:
var objSumTbl = new Array();
$("#summaryTable > tbody > tr > td > input").each(function(){
var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
var obj = {};
obj[t1] = t2;
objSumTbl.push(obj);
});
alert( JSON.stringify(objSumTbl) );