SORU
13 NİSAN 2009, PAZARTESİ


Tüm javascript olayları bir sayfa jquery kullanarak kablolu listesi

JQuery kullanarak, hangi element için olaya bağlı olaylar ve bir liste almak mümkün mü?

CEVAP
13 NİSAN 2009, PAZARTESİ


bir WordPress kullanmak durumunda öğesi veri işleyicileri saklar çünkü bu nispeten kolay hale getirir. Böyle bir şey kullanmak gerekir:

(function($) {
    $.eventReport = function(selector, root) {
        var s = [];
        $(selector || '*', root).andSelf().each(function() {
            // the following line is the only change
            var e = $.data(this, 'events');
            if(!e) return;
            s.push(this.tagName);
            if(this.id) s.push('#', this.id);
            if(this.className) s.push('.', this.className.replace(/  /g, '.'));
            for(var p in e) {
                var r = e[p],
                    h = r.length - r.delegateCount;
                if(h)
                    s.push('\n', h, ' ', p, ' handler', h > 1 ? 's' : '');
                if(r.delegateCount) {
                    for(var q = 0; q < r.length; q  )
                        if(r[q].selector) s.push('\n', p, ' for ', r[q].selector);
                }
            }
            s.push('\n\n');
        });
        return s.join('');
    }
    $.fn.eventReport = function(selector) {
        return $.eventReport(selector, this);
    }
})(jQuery);

ve ona şöyle diyebilirsin:

// all events
alert($.eventReport());

// just events on inputs
alert($.eventReport('input')); 

// just events assigned to this element
alert($.eventReport('#myelement')); 

// events assigned to inputs in this element
alert($.eventReport('input', '#myelement')); 
alert($('#myelement').eventReport('input')); // same result

// just events assigned to this element's children
alert($('#myelement').eventReport()); 
alert($.eventReport('*', '#myelement'); // same result

GÜNCELLEME: İşleyicileri ve yukarıda çıkış için temsilci olaylar hakkında biraz bilgi count fonksiyonu ekledim.

GÜNCELLEME (8/24/2012): Yukarıdaki fonksiyonu hala jQuery 1.7.2 ve daha düşük çalışır, ancak daha uzun süre saklar hiç bir WordPress kullanmak durumunda jQuery.data(elem, 'events') nesne veeğer bir WordPress kullanmak 1.8 veya sonraki bir sürümünü kullanıyorsanız artık yukarıdaki fonksiyonu kullanmak mümkün olacak!

jQuery.data(elem, 'events') karşılığında şimdi jQuery._data(elem, 'events') kullanabilirsiniz. Bu gibi görünecektir yukarıdaki fonksiyon için bir güncelleştirme:

(function($) {
    $.eventReport = function(selector, root) {
        var s = [];
        $(selector || '*', root).addBack().each(function() {
            // the following line is the only change
            var e = $._data(this, 'events');
            if(!e) return;
            s.push(this.tagName);
            if(this.id) s.push('#', this.id);
            if(this.className) s.push('.', this.className.replace(/  /g, '.'));
            for(var p in e) {
                var r = e[p],
                    h = r.length - r.delegateCount;
                if(h)
                    s.push('\n', h, ' ', p, ' handler', h > 1 ? 's' : '');
                if(r.delegateCount) {
                    for(var q = 0; q < r.length; q  )
                        if(r[q].selector) s.push('\n', p, ' for ', r[q].selector);
                }
            }
            s.push('\n\n');
        });
        return s.join('');
    }
    $.fn.eventReport = function(selector) {
        return $.eventReport(selector, this);
    }
})(jQuery);

GÜNCELLEME (4/25/2013): andSelf() 1.8 önerilmiyor.x http://bugs.jquery.com/ticket/9800 Ben addBack() ile yerine yerini aldı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hey Nadine

    Hey Nadine

    24 Kasım 2006
  • SellerDp

    SellerDp

    27 EKİM 2009
  • JeezyVEVO

    JeezyVEVO

    12 Mayıs 2009