謝謝你給這個看看。我將從一個快速的圖像開始。點擊任何紅色框搜索結果似乎會返回正上方的項目<div>
。JQuery&Javascript:Intermittant錯誤匹配的點擊div和返回的div?
在這裏,我點擊了1613 CAROUSEL CIR
,但該事件返回的ID /內容爲代表1612..
的項目有時甚至怪異,例如,每個項目下面1420
可能指向回1420
。所以這是並不總是與<div>
衝突,它是直接的鄰居,雖然通常是這樣。
我一直無法在此行爲中找到任何明確的模式。有時它只是列表中的一個或兩個項目;有時候大多數列表都會受到影響,結果的「很大一部分」指向一個特定的div。
只有一個真正的一致性 - 通常前幾個項目按預期工作,短列表將100%正確。但是,很長的列表(50+)是不超過半長名單(20+)一定更差..:/
代碼建立了由一個jQuery $.ajax()
呼叫檢索JSON數據搜索結果進行迭代,這是相關代碼構建可見的搜索結果:
if(result.d.length > 0)
{
var i=0;
for(i; i<result.d.length; i++)
{
// ..there's a bunch of irrelevant code here to set the map bounds..
// ..then I build the HTML using JQuery like this
//
var date = new Date();
var divID = "searchItemDiv" + date.getTime().toString();
var $searchItemDiv = $("<div id='" + divID + "' class='searchItemDiv'>"+result.d[i].Description+"</div>");
$searchItemDiv.data('itemData', result.d[i]);
$searchItemDiv.bind('click', onSearchItemClick);
$("#searchResults").append($searchItemDiv);
}
}
雖然我不懷疑事件處理程序的問題,相關的代碼有如下:
function onSearchItemClick(event)
{
if(event.target.id.toString() !== '')
{
// I clicked 1613, but event returned DIV with text of "1612"??
//
var item = $('#'+event.target.id.toString()).data('itemData');
alert(event.target.id.toString()+"\n"+
$('#'+event.target.id.toString()).text());
// ..more irrelevant stuff to show a popup of property data..
}
}
火狐,Chrome和IE全部展示相同的行爲,所以它不是特定於瀏覽器的。
我是相對確定在呈現階段,這不是race condition的產物,但我對使用JavaScript知道某些事情並不舒服。
我對此很困惑。 FWIW,我是一位前C#開發人員,也是JavaScript/JQuery開發相對較新的,因此可能會有一個問題,我正在介入的相關JavaScript上下文和/或JQuery。
你仔細檢查了JSON以確保沒有重複的值嗎? –
這幾乎就好像DIV元素的一個隱藏部分延伸到它下面的結果頂部,但如果我打開邊界/背景渲染,我沒有看到任何證據。 – elrobis
hmm,似乎很奇怪,如果你在處理程序中使用'this',你會得到相同的行爲嗎? 例如'this.id'或'$(this).text()' – Homungus