我會開始說我對jQuery相當陌生。在大多數情況下,我發現它很直觀和強大,但這種情況讓我徹底難倒了。jQuery爲它找到的每個元素返回兩個元素?
在以下方法中,對.each()
的調用返回找到的每個元素的兩個元素。它迭代了一組表格行,給出了以「communication」開頭的ID,後面跟着一個ID號碼。對於它返回的每一行,它會處理兩次。
使用Firebug,我已驗證DOM只有每個表格行的單個實例。還使用Firebug,我已驗證該方法未被調用兩次; .each()
中的迭代真正遍歷每個返回的錶行兩次。當所有的AJAX調用完成時,我將在數據庫中爲表中創建的每一行創建兩個條目。
這是造成問題的代碼:
function getCommunications() {
var list = $('[id^=communication]');
var communications = new Array();
list.each(function() {
var communication = {
ID: $(this).find('.commCompanyID').val(),
/*
* SNIP: more object properties here that are
* unnecessary to this discussion
*/
};
communications.push(communication);
});
return communications;
}
截至return communications
點,返回包含兩倍多的元素,也有錶行的陣列。
我應該注意,幾乎相同的代碼(但與特定的div列表不同)正在同一頁面上工作。這只是桌子上的問題。
我使用jQuery 1.4.1,它隨Visual Studio .NET中的2010年版
表格標記是完全動態的 - 那就是,除了標題行,它是依賴於數據或者在頁面加載時返回或由用戶通過對話框創建。我只會介紹頁面加載時創建的代碼;再次使用Firebug我已經驗證了當最終用戶使用對話框匹配創建行時,我動態創建的內容。 (這應該是任何人讀取,但備案,這是一個ASP.NET MVC 2.0項目。)
<table id="commTable">
<tr>
<th></th>
<th>
Date/Time
</th>
<th>
Contact
</th>
<th>
Type
</th>
<th>
Duration
</th>
<th>
Notes
</th>
</tr>
<% foreach (var item in Model) { %>
<tr id="communication<%: item.ID %>">
<td>
<a href="#" onclick="showEditCommunicationForm(<%: item.ID %>">
Edit</a>
<span class="commDeleteButton">
<a href="#" onclick="deleteCommunication(<%: item.ID %>)">
Delete</a>
</span>
</td>
<td>
<span class="commDateTime"><%: item.DateTime %></span>
<input type="hidden" class="commID" value="<%: item.ID %>" />
<input type="hidden" class="commIsDeleted"
value="<%: item.IsDeleted %>" />
</td>
<td>
<span class="commSourceText"><%: item.Company.CompanyName %></span>
<input type="hidden" class="commCompanyID"
value="<%: item.CompanyID %>" />
</td>
<td>
<%: item.CommunicationType.CommunicationTypeText %>
<input type="hidden" class="commTypeID"
value="<%: item.CommunicationTypeID %>" />
</td>
<td>
<span class="commDuration"><%: item.DurationMinutes %></span>
Minutes
</td>
<td>
<span class="commNotes"><%: item.Notes %></span>
</td>
</tr>
<% } %>
</table>
你能提供表格標記嗎? – jAndy 2010-06-11 13:56:38
@jAndy:完成。這有點...在...大的一方。 – 2010-06-11 14:05:38
'alert($('[id^= communication]')。length);'給你嗎?你確定桌子的祖先沒有以'communication'開頭的ID嗎? – Matt 2010-06-11 14:10:47