2011-07-20 40 views
5

我正在建立銷售活動門票的系統。現在有大約1000個不同的座位可供選擇作爲訪問者。馬比有一天它將達到5000.jQuery點擊1000個div上的事件,優化方法?

現在我有一個每個點的div,然後一些jQuery用ajax保留點。所以那些我有大約1000個div和更令人擔憂的jQuery選擇器會在每個div上設置一個click事件。

對此有更好的方法嗎?

我想觸發一個div時按下,而不是重新加載頁面的Ajax。

+0

你能發佈一些源代碼嗎?如果可能,我們可以幫助您實現優化。 – dknaack

回答

8

使用.delegate()

$("#container").delegate(".child", "click", function(){ 
    alert("Clicked!"); 
}); 

這樣,你要讓只有一個管理所有的div事件。

+0

謝謝!你和所有其他人建議的代表。 –

2

使用「事件委託」,即綁定點擊事件一次,而不是每個單獨的div,而是圍繞您的1,000 div的div。在處理程序中,可以通過傳入處理程序的「event」對象檢索被單擊的div的元素。

+0

+1。這是做到這一點的正確方法。 – pederOverland

4

簡單地使用jQuery委託方法:

$('.theater').delegate('.seat','click',function(event){ 
    var self = $(event.target); 
    console.log(self); 
    // self is the '.seat' element that has been clicked. 
}); 
+1

'$(this)'在委託處理程序內工作並引用目標元素,不需要'$(event.target)'。 –

+0

糟糕,太精確了。我通常使用綁定函數('this'總是指向我的View對象),所以我習慣使用'$(event.target)'。 –

1

該方法被稱爲事件代表團,正如Ash解釋的那樣。 jQuery有幾個方法來幫助這裏。 live()和更新的委託() http://api.jquery.com/delegate/這更精確一點。

因此,你將一個點擊事件綁定到一個元素,它是你感興趣的所有div的一個元素,點擊它們會讓父元素捕獲DOM。在哪一點你可以做你需要的。