我正在建立銷售活動門票的系統。現在有大約1000個不同的座位可供選擇作爲訪問者。馬比有一天它將達到5000.jQuery點擊1000個div上的事件,優化方法?
現在我有一個每個點的div,然後一些jQuery用ajax保留點。所以那些我有大約1000個div和更令人擔憂的jQuery選擇器會在每個div上設置一個click事件。
對此有更好的方法嗎?
我想觸發一個div時按下,而不是重新加載頁面的Ajax。
我正在建立銷售活動門票的系統。現在有大約1000個不同的座位可供選擇作爲訪問者。馬比有一天它將達到5000.jQuery點擊1000個div上的事件,優化方法?
現在我有一個每個點的div,然後一些jQuery用ajax保留點。所以那些我有大約1000個div和更令人擔憂的jQuery選擇器會在每個div上設置一個click事件。
對此有更好的方法嗎?
我想觸發一個div時按下,而不是重新加載頁面的Ajax。
使用.delegate():
$("#container").delegate(".child", "click", function(){
alert("Clicked!");
});
這樣,你要讓只有一個管理所有的div事件。
謝謝!你和所有其他人建議的代表。 –
使用「事件委託」,即綁定點擊事件一次,而不是每個單獨的div,而是圍繞您的1,000 div的div。在處理程序中,可以通過傳入處理程序的「event」對象檢索被單擊的div的元素。
+1。這是做到這一點的正確方法。 – pederOverland
簡單地使用jQuery委託方法:
$('.theater').delegate('.seat','click',function(event){
var self = $(event.target);
console.log(self);
// self is the '.seat' element that has been clicked.
});
'$(this)'在委託處理程序內工作並引用目標元素,不需要'$(event.target)'。 –
糟糕,太精確了。我通常使用綁定函數('this'總是指向我的View對象),所以我習慣使用'$(event.target)'。 –
你可能想看看這個線程SO,它可能是對你有用。從你的帖子很難說,但在這種情況下,圖像地圖可能是你的選擇。 Using JQuery hover with HTML image map
該方法被稱爲事件代表團,正如Ash解釋的那樣。 jQuery有幾個方法來幫助這裏。 live()和更新的委託() http://api.jquery.com/delegate/這更精確一點。
因此,你將一個點擊事件綁定到一個元素,它是你感興趣的所有div的一個元素,點擊它們會讓父元素捕獲DOM。在哪一點你可以做你需要的。
你能發佈一些源代碼嗎?如果可能,我們可以幫助您實現優化。 – dknaack