2013-02-26 10 views
7

Bilmekte olduğum kadarıyla, click() yönteminin benim için çalışmıyor çünkü yüklediğim öğe sayfa yükünde mevcut değil (DOM) hazır).on() vs live() fonksiyonunu henüz içermeyen bir öğede tıklatın

.live('click',function(){...})'u kullanmayı öneren birçok yanıt buldum. Bu harika çalışıyor!

Ancak .live() yerine .on('click',function(){...}) kullanarak denedim

Yani jQuery 1.7

itibariyle amortismana tabi, ancak .click() aynı (işe davranır değil gelmez.

kimse neden biliyor mu, ya da ben (çalışıyor) .live() benzer .on() kullanmak için neler yapabileceğinizi?

+0

@ wrschneider99 evet gerçekten! –

cevap

20

on() hem bind() ve live() değiştirdiğinden, olayın faydalanmak amacıyla üçüncü bir parametre geçmesi gerekiyor Heyet (diğer bir deyişle, eski live() gibi çalışması için):

$(document).on('click','element', function(){...}); 

element bağlamak istediğiniz öğedir:

$('#container').on('click', '.element', function(){ }); 
+1

Teşekkürler, ya # konteyner ".element" ile aynı öğe ise? Her iki yerde de aynı elemanı kullanmayı denedim, ama şans yok:/ –

+2

@iight Sonra işe yaramaz. '# container' dinamik olarak oluşturulamaz. J08691 dediği gibi, performansı artırmak için dinamik olarak eklenen öğeye yakın bir sarma elemanı seçin. – Johan

+0

bir ana öğe olmalıdır, ancak, sağ? –

7

Böyle bir biçimi kullanmak mümkün olmalıdır tıklama etkinliği document'u kullanmak, DOM hiyerarşisinde dinamik olarak yüklenecek öğeye daha yakın bir zamanda DOM yüklendiğinde mevcut olan bir öğeyi kullanmak istediğiniz için en kötü durum senaryosudur. jQuery .on() Dokümanlar

:

olay gidericiler sadece seçili öğelere bağlı; , kodunuzun aramayı .on() yapmasını istedikleri anda sayfada bulunmalıdır. Öğelerin mevcut olduğundan ve seçilebildiğinden emin olmak için, sayfada HTML işaretlemesi olan öğeler için bir belge hazır işleyicisi içinde olay bağını uygulayın. Sayfaya yeni HTML enjekte ediliyorsa, öğeleri seçin ve yeni HTML sayfa sayfanın içine yerleştirildikten sonra olay işleyicileri ekleyin.

+1

Teşekkürler! Bu çalışır, ama şimdi sadece bütün (belge) bağlayıcıyı araştırmak zorundayım. Bu sorunu düzeltiyor ama! –