2011-12-18 3 views
5

Şu anda binlerce satırlık jQuery kodu içeren bir sitede çalışıyorum, özellikle çok sayıda tıklama etkinliği var ve daha fazla performans olduğunu merak ediyordum. Tıklama olaylarını veya bir öğeye yapılan herhangi bir olayı bağlamak için orada, en iyi uygulamaların farkında olun.jQuery olaylarının öğelere bağlanması için en iyi yaklaşım nedir

Çeşitli bağlantılarda ve eşyalarda 30'dan fazla tıklama etkinliğine sahip olmak, iyi bir performansın kaydedilmediğinden emin olamaz. Yeni jQuery 1.7 "on" işlevi kullanılıyor, belki de olaylar vücut elemanına veya başka bir şeye bağlanmalı ve daha sonra bir kontrol tıklandığında öğeyi tıklayıp oradan çalışacak mı? Ya da, modern bir tarayıcı ya da performans için gerçekten bir sorun değil, bir çok olay ve bağlayıcı mı?

+0

Olay delege, açıkçası. Statik kapsayıcı öğelerinize sahip olmak istersiniz ve işleyicileri ağırlıklı olarak bu öğelere bağlarsınız ... Örneğin, düğmeleri olan bir araç çubuğunuz varsa, araç çubuğunun kendisinde bir tıklatma işleyicisi istersiniz. –

+0

Her etkinlik tıklandığında ne kadar benzersiz? –

+0

Eh, değişir. Tıklama etkinliklerinin bazıları, karuseller içindir, bazıları popup modellerini göstermek içindir, bazıları etkinliklere diğer öğelere geçmek içindir. Bu yüzden her olayın benzersiz olduğunu söyleyebilirim. –

cevap

5

Öğeleri, tüm tıklanan öğeleri içeren en düşük dom öğesine bağlamanız gerekir.

Yani her öğesi içeren foo adında bir div varsa, derdin ki:

$("#foo").on("click", "yourselector", function(){ 
}); 

sizin elemanları sayfanızın her santimini yayılmış, o zaman çok az dinlersen üst:

$(document).on("click", "yourselector", function(){ 
}); 

sorunuzu doğru anlamak ediyorum, ben gerçekten çok önceki geliştirici yapmadım umut gibi bir şey:

$("#someButtonId").on("click", function(){ 
    //this defeats the whole purpose of on!!! 
}); 
+0

Her zaman böyle yapman gerektiğini düşündüm. Olumlu bir şey olsa da, kesinlikle yararlı. Kodun çoğunu ben yazmadım, bu yüzden düzeltmek ve daha verimli hale getirmek istiyorum. Bağlamak istediğiniz tüm öğelerin kapsayıcı tıklama olayları, en iyi yaklaşımdır. –

+0

Sadly Adam, önceki geliştiricinin tek bir öğeyi kullanarak tıklamalara bağladığınızı belirtti, çünkü bu yüzden bunu düzeltmeye çalışıyorum, bu bir performans kabusu ve bununla birlikte bazı güzel un-PC şeyler yapan bir Magento sitesi olduğunu belirtmemek satır içi olay çağrıları ve neyi değil. –

+0

$ (document) .on ("click", "yourselector", function() {öğelerin benzersizliğinden dolayı kod için kullanmayı düşünüyordum, ancak bir sayfa için kötü performansın akıllıca olup olmayacağından emin değildim Çok fazla elemandan oluşuyor –

1

Aynı olayı bir öğede birden çok kez bağlayabilirsiniz, ancak aynı bağlantıda 30 tıklama olayına sahipseniz, bunu farklı bir şekilde yapmalısınız. Tek bir olay işleyicisinde yapmak istediğiniz tüm bu farklı eylemlerin kodunu her küçük şeyi kendi başlarına bağlamak yerine koyun.