为什么警报返回未定义或空白,即使ID存在且具有值?
$('#tblData > tbody > tr').each(function() {
$(this).children('td').each(function(){
ID = $(this).children().first().next().attr("id");
alert(ID);
});
count = count + 1;
});
新行
$("#tblData tbody").append(
"<tr>"+
"<td><label for='BookingRoom_"+id+"_Room_No'>Room No</label><select single='single' size='1' name='BookingRoom["+id+"][roomId]' id='BookingRoom_"+id+"_roomId'><option value='1'>1</option><option value='2'>2</option></select></td>"+
"<td><label for='BookingRoom_"+id+"_startDate' class='required'>Start Date <span class='required'>*</span></label><input name='BookingRoom["+id+"][startDate]' id='BookingRoom_"+id+"_startDate' type='text' /></td>"+
"<td><label for='BookingRoom_"+id+"_endDate' class='required'>End Date <span class='required'>*</span></label><input name='BookingRoom["+id+"][endDate]' id='BookingRoom_"+id+"_endDate' type='text' /></td>"+
"<td><label for='BookingRoom_"+id+"_adults' class='required'>Adults <span class='required'>*</span></label><select single='single' size='5' name='BookingRoom["+id+"][adults]' id='BookingRoom_"+id+"_adults'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option></select></td>"+
"<td><label for='BookingRoom_"+id+"_children' class='required'>Children <span class='required'>*</span></label><select single='single' size='5' name='BookingRoom["+id+"][children]' id='BookingRoom_"+id+"_children'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option></select></td>"+
"<td><button type='button'>Delete</button></td>"+
"</tr>");
答案 0 :(得分:0)
警报返回未定义,因为您的变量&#34; ID&#34;未定义。它不存在,也没有价值。
这并不矛盾,而是指出你的假设显然是不正确的,因为输出不是谎言。 ID确实未定义。
这个JSFiddle似乎表明你提供的(极其多余的)代码会为除了提交按钮之外的每个元素显示一个ID,你没有应用ID。
<table id="tblData">
<tbody>
<tr>
</tr>
</tbody>
</table>
<script>
var id = 1;
$("#tblData tbody").append(
"<tr>"+
"<td><label for='BookingRoom_"+id+"_Room_No'>Room No</label><select single='single' size='1' name='BookingRoom["+id+"][roomId]' id='BookingRoom_"+id+"_roomId'><option value='1'>1</option><option value='2'>2</option></select></td>"+
"<td><label for='BookingRoom_"+id+"_startDate' class='required'>Start Date <span class='required'>*</span></label><input name='BookingRoom["+id+"][startDate]' id='BookingRoom_"+id+"_startDate' type='text' /></td>"+
"<td><label for='BookingRoom_"+id+"_endDate' class='required'>End Date <span class='required'>*</span></label><input name='BookingRoom["+id+"][endDate]' id='BookingRoom_"+id+"_endDate' type='text' /></td>"+
"<td><label for='BookingRoom_"+id+"_adults' class='required'>Adults <span class='required'>*</span></label><select single='single' size='5' name='BookingRoom["+id+"][adults]' id='BookingRoom_"+id+"_adults'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option></select></td>"+
"<td><label for='BookingRoom_"+id+"_children' class='required'>Children <span class='required'>*</span></label><select single='single' size='5' name='BookingRoom["+id+"][children]' id='BookingRoom_"+id+"_children'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option></select></td>"+
"<td><button type='button'>Delete</button></td>"+
"</tr>");
$('#tblData > tbody > tr').each(function() {
console.log($(this).html());
$(this).children('td').each(function(){
console.log($(this).html());
ID = $(this).children().first().next().attr("id");
console.log($(this).children().first().next().html());
alert(ID);
});
//count = count + 1;
});
</script>
我假设您的实际起始HTML代码结构正常,因为如果是这种情况,您根本不会收到警报。 (没有找到任何东西,所以不会迭代)
编辑:正如Kevin B在评论中指出的那样,我在下面的原始分析是有缺陷的。我错过了嵌套&#34;每个&#34;调用强>
了解这一点可能会有所帮助 $(本)。儿童()。第一下一个()() 将检索每个表行中的第二个TD标记,并且您的TD标记都没有ID。因此,ID的未定义值。 顺便说一下,您使用的选择器指示JQuery: 找到#tblData, 然后它的孩子tbody标签, 然后在每个子tr标签上, 找到第一个td标签, 然后跳到下一个, 然后得到它的&#34; id&#34;属性 从我所看到的你的HTML结构,我不认为这是你真正想要的。