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

  • habpsu

    habpsu

    25 Temmuz 2007
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • Videogamerz | Call of Duty

    Videogamerz

    5 NİSAN 2012