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
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ı.
Nasıl bir düğme başka bir sayfa kullan...
Kullanarak " koyuyorsun;sayfa özel...
Yeni sayfa JavaScript kullanarak yükle...
saf JavaScript jQuery eşdeğer'in ...
nasıl iFrame Ana Sayfa jquery kullanar...