2010-03-05 25 views
48
ile ilişkili işlevlere erişilmesi

jQuery ile işlevleri .bind() kullanarak DOM nesnesinde tetiklenen bir olaya veya olay işleyicisi yardımcısı işlevlerinden birine bağlayabilirsiniz.İşlevlerin jQuery

jQuery bunu bir şekilde dahili olarak saklamak zorundadır ve bir DOM nesnesine izin verilip verilmediğini merak ediyorum, hangi olayların nesneye bağlı olduğunu bulmak ve bu işlevlere erişmek vb. İstenilen sonuç bu gibi görünebilir. :

{ 
    click: [function1, function2], 
    change: [function3], 
    blur: [function4, function5, function6] 
} 
+0

Bu soruya bakın: http://stackoverflow.com/questions/2382994/how-to-check-if-any-javascript-event-listeners-handlers-attached-to-an-element-do – Pointy

cevap

35

Düzenleme: yöntem aşağıda şu makalede ilginç ipuçları ve püf noktaları bir sürü bulabilirsiniz sadece jQuery < yılında 1.7

çalışır : Things you may not know about jQuery.

jQuery olay işleyicileri saklamak için data kullandığı görünüyor: Sen jQuery'nin olay depolama yoluyla bir öğenin (veya herhangi bir nesne) bağlı tüm etkinlik işleyicileri erişebilir

:

// List bound events: 
console.dir(jQuery('#elem').data('events')); 

// Log ALL handlers for ALL events: 
jQuery.each($('#elem').data('events'), function(i, event){ 
    jQuery.each(event, function(i, handler){ 
     console.log(handler['handler'].toString()); 
    }); 
}); 

// You can see the actual functions which will occur 
// on certain events; great for debugging! 
+7

Bu artık yok jQuery 1.7 ve daha yeni çalışır; eikes'in yeni yolun cevabını gör. – kevingessner

+0

Bunu yanıtlamak için cevabımı düzenledim. Teşekkürler – PatrikAkerstrand

+0

Çalışmıyor. Denenmiş $ (document) .data ('events') '&' $ ('html') veri ('events') '- boşuna. – Cody

66

jQuery 1.7, olağan veri() işlevindeki olayları göstermeyi durdurdu. Hala bunları böyle alabilirsiniz:

var elem = $('#someid')[0]; 
var data = jQuery.hasData(elem) && jQuery._data(elem); 
console.log(data.events); 

unutmayın, bu sadece jQuery kullanarak bağlı olan Etkinlikleri için çalıştığını. AFAIK orada addEventListener gibi düzenli DOM işlevlerini kullanarak bağlı olan tüm olayları görmenin bir yolu yoktur.

Onları webkit denetçisinde görebilirsiniz: Öğeler sekmesinde, istenen DOM düğümüne gidin, sağ tarafta "Olay Dinleyicileri" açılır menüsünü seçin.

+1

jQuery._data (elem), 1.10.2 sürümünde iyi çalışıyor – rajakvk

İlgili konular