2013-10-24 167 views
0

我正在用WinJS構建Windows 8.1 Store應用程序。當用戶查詢某個搜索結果顯示在<p class="searchresults">content</p>標記中時。單擊事件不會觸發元素

我想爲.searchresults類添加事件處理程序。我已經做了以下情況:

$('.searchresults').on('click', function() { 
console.log("clicked"); 
}); 

我試過,即使沒有.on()

$('.searchresults').click(function() { 
console.log("clicked"); 
}); 

然而事件永遠不會被解僱。我已經設置了一個斷點,這樣我就可以看到火災時 - 但是這永遠不會發生

我試着通過WinJS方式添加事件處理程序:

Microsoft.Maps.Events.addHandler(document.getElementsByClassName("searchresults"), 'click', myfunc); 

沒有成功。

任何想法爲什麼會發生這種情況?

回答

3

我猜你在嘗試安裝事件處理程序(動態內容的常見問題)之後會創建<p class="searchresults">content</p>對象。這對於正常的事件處理不起作用,因爲當您嘗試向其添加事件處理程序時,DOM對象不存在。

如果是這樣的話,那麼你就需要使用委派事件處理是這樣的:

$(document.body).on('click', '.searchresults', function() { 
    console.log("clicked"); 
}); 

這將允許你動態地創建在任何時候SearchResult所的內容和事件處理程序通過事件仍會觸發代表團(事件傳播給他們的父母)。


您還沒有表現出周圍的搜索結果內容的HTML,但要做到這一點最優化的方式是選擇最接近的靜態父的搜索結果(未動態創建一個父母和已經存在當您附加事件處理程序)並附加事件到:

$(closest static parent selector).on('click', '.searchresults', function() { 
    console.log("clicked"); 
}); 
+0

完美工作,非常感謝! – PeterInvincible

相關問題