2012-04-26 20 views
7

bir şey yapın Sayfamda bir şeyler yapmak için document.ready olayını bekliyorum.HTML öğelerinin bir sınıf almasını bekleyin ve

Ne yazık ki, değiştiremediğim başka bir senaryo, senaryonum çağrıldığında büyüsünü henüz yapmadı. Bu nedenle, sınıf adında jquery seçimi, sınıf DOM'da henüz mevcut olmadığından başarısız olur.

Bu nedenle, bir öğenin belirli bir sınıfa girmesini, sonra da onunla bir şey yapana kadar işlevimin dinlemesini söylemek istiyorum.

Bunu nasıl başarabilirim? Bu (sözde kod) gibi

+0

Bu diğer komut dosyasını denetliyor musunuz? Kodunuzu diğer kodun geri çağrısı olarak arayamaz mısınız? – j08691

+0

veya özel bir olayı tetiklemek için diğer komut dosyasını edinin – rgvcorley

+0

Bu sorunun bir kopyası gibi görünüyor: http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed –

cevap

3

Sınıfı ekledikten sonra bir olayı tetikleyebilirsiniz.

Örnek:

$('#ele').addClass('theClass'); 
$(document).trigger('classGiven') 


$(document).bind('classGiven',function(){ 
    //do what you need 
}); 
12

şey:

var timer = setInterval(function() { 
    if (element.className=='someclass') { 
     //run some other function 
     goDoMyStuff(); 
     clearInterval(timer); 
    } 
}, 200); 

veya element için dinlemek eklenecek:

function flagInsertedElement(event) { 
    var el=event.target; 
} 
document.addEventListener('DOMNodeInserted', flagInsertedElement, false); 

jQuery sürümü:

$(document).on('DOMNodeInserted', function(e) { 
    if (e.target.className=='someclass') { 
     goDoMyStuff(); 
    } 
}); 

da liveQuery eklentisi var :

$("#future_element").livequery(function(){ 
    //element created 
}); 

Veya bu normal bir olay işleyicisiyse, jQuery's on();

+0

Zamanlayıcı yaklaşımı cazibe gibi çalıştı. – k0pernikus

+0

Bunun üzerinde üç düşüş var, ancak bu gibi basit bir setInterval, çok fazla kaynak kullanmıyor ve sadece iyi çalışıyor, ancak sınıf hiç bulunmazsa, bir kaç saniye sonra aralıkları temizleyen bir zaman aşımı işlevi gibi bir çeşit sonu olmalı. . Eklenen DOM düğümü dinlemek için jQuery funcion, muhtemelen bunu yapmanın en iyi yoludur, ancak işleyici kaldırılmadıkça, devam etmekte olan, className için eklenen tüm öğelerin kontrol edilmesi, benim düşüncemde bir setInterval'a sahip olmaktan daha kötüdür. – adeneo

+0

@adeneo harika yanıt, aferin, teşekkürler :) –

0

Ben senin soru yanlış var ama neden sadece document.ready bu kadar sade bir şey yapmıyor, üzgünüm? :

$("#myelement").addClass('myclass'); 

if($("#myelement").hasClass('myclass')) { 
    alert('do stuff here'); 
} 
+0

Öğeyi bu sınıfa eklemiyorum. Başka bir senaryo tarafından eklenir. Ve ben bu değişikliği yakalamak ve daha sonra üzerinde bir sihir yapmak istiyorum. – k0pernikus

+0

Yani mümkünse başka bir komut dosyasında geri arama daha iyi olabilir mi? – Vytautas