为什么警报返回未定义?

时间:2014-07-02 17:03:28

标签: javascript jquery

为什么警报返回未定义或空白,即使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>");

1 个答案:

答案 0 :(得分:0)

警报返回未定义,因为您的变量&#34; ID&#34;未定义。它不存在,也没有价值。

这并不矛盾,而是指出你的假设显然是不正确的,因为输出不是谎言。 ID确实未定义。

这个JSFiddle似乎表明你提供的(极其多余的)代码会为除了提交按钮之外的每个元素显示一个ID,你没有应用ID。

JSFiddle with your code in it

<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结构,我不认为这是你真正想要的。