2009-11-13 20 views
5

Sorunun söylendiği gibi, belirli bir öğeye bağlı olayların listesine ihtiyacım var.jQuery'de bir öğeye bağlı olayların bir listesini almak mümkün mü?

ben dom yüklenmesi o elemana bağlı tıklama, mouseover vb gibi olayları kastediyorum.

(Aptal) örnek:

$("#element").click(function() 
{ 
    //stuff 
}); 
$("#element").mouseover(function() 
{ 
    //stuff 
}); 
$("#element").focus(function() 
{ 
    //stuff 
}); 

Sonuç:

tıklama, mouseover, her olay bir diziye eklenir

+0

Dağıtılmış bir çözümde hata ayıklamaya veya yönetmeye mi çalışıyorsunuz? –

cevap

13

odak.

Bu dizi jQuery veri yöntemi kullanılarak erişilebilir: Sadece yazın

$("#element").data('events') 

Kundakçı bir nesnenin tüm olayları günlüğe kaydetmek için:

console.log ($("#element").data('events')) 

Ve tüm sınır listesini alacak olaylar.


Güncelleme:

için jQuery 1.8 ve daha yüksek dahili jQuery veri nesnesine içine bakmak zorunda:

$("#element").each(function(){console.log($._data(this).events);}); 
// or 
console.log($._data($("#element")[0]).events); 
+1

Yeni ziyaretçiler için bir not olarak: Bu cevap jQuery [Sürüm 1.8] 'den beri eskidir (http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/): "* .data (“Olaylar”): jQuery, olayla ilgili verilerini her öğedeki (bekle) olayı adlı bir veri nesnesinde depolar. Bu, dahili bir veri yapısıdır, bu nedenle 1,8'de bu, kullanıcı veri adı alanından kaldırılır. t aynı isimdeki öğelerle çakışır. […] * ". Ayrıca bakınız: [jQuery 1.8 olay işleyicileri bul] (http://stackoverflow.com/questions/12214654/jquery-1-8-find-event-handlers) – insertusernamehere

+1

Teşekkürler - bir not ekledim :) – jantimon

2

Sen element.data('events'); erişebilirsiniz. Örnek:

var events = element.data('events'); 
for (var type in events) { 
    // `type` is "click", "mouseover", "change", etc. 
    for (var handler in events[type]) { 
     // `handler` is the associated function. 
    } 
} 
İlgili konular