Старая ветка, я знаю.Мне также нужно было что-то для мониторинга событий, и я написал это очень удобное (отличное) решение.Вы можете отслеживать все события с помощью этого хука (в Windows-программировании это называется хуком).Этот хук не влияет на работу вашего программного обеспечения / программы.
В журнале консоли вы можете увидеть что-то вроде этого:
Объяснение того, что вы видите:
В журнале консоли вы увидите все выбранные вами события (см. Ниже «Как использовать» ) и показывает тип объекта, имя (имена) класса, идентификатор, <: имя функции>, <: имя события>.Форматирование объектов подобно css.
Когда вы нажимаете кнопку или какое-либо связанное событие, вы увидите его в журнале консоли.
Код, который я написал:
function setJQueryEventHandlersDebugHooks(bMonTrigger, bMonOn, bMonOff)
{
jQuery.fn.___getHookName___ = function()
{
// First, get object name
var sName = new String( this[0].constructor ),
i = sName.indexOf(' ');
sName = sName.substr( i, sName.indexOf('(')-i );
// Classname can be more than one, add class points to all
if( typeof this[0].className === 'string' )
{
var sClasses = this[0].className.split(' ');
sClasses[0]='.'+sClasses[0];
sClasses = sClasses.join('.');
sName+=sClasses;
}
// Get id if there is one
sName+=(this[0].id)?('#'+this[0].id):'';
return sName;
};
var bTrigger = (typeof bMonTrigger !== "undefined")?bMonTrigger:true,
bOn = (typeof bMonOn !== "undefined")?bMonOn:true,
bOff = (typeof bMonOff !== "undefined")?bMonOff:true,
fTriggerInherited = jQuery.fn.trigger,
fOnInherited = jQuery.fn.on,
fOffInherited = jQuery.fn.off;
if( bTrigger )
{
jQuery.fn.trigger = function()
{
console.log( this.___getHookName___()+':trigger('+arguments[0]+')' );
return fTriggerInherited.apply(this,arguments);
};
}
if( bOn )
{
jQuery.fn.on = function()
{
if( !this[0].__hooked__ )
{
this[0].__hooked__ = true; // avoids infinite loop!
console.log( this.___getHookName___()+':on('+arguments[0]+') - binded' );
$(this).on( arguments[0], function(e)
{
console.log( $(this).___getHookName___()+':'+e.type );
});
}
var uResult = fOnInherited.apply(this,arguments);
this[0].__hooked__ = false; // reset for another event
return uResult;
};
}
if( bOff )
{
jQuery.fn.off = function()
{
if( !this[0].__unhooked__ )
{
this[0].__unhooked__ = true; // avoids infinite loop!
console.log( this.___getHookName___()+':off('+arguments[0]+') - unbinded' );
$(this).off( arguments[0] );
}
var uResult = fOffInherited.apply(this,arguments);
this[0].__unhooked__ = false; // reset for another event
return uResult;
};
}
}
Примеры использования:
Отслеживание всех событий:
setJQueryEventHandlersDebugHooks();
Мониторинг только всех триггеров:
setJQueryEventHandlersDebugHooks(true,false,false);
Мониторинг только всех включенных событий:
setJQueryEventHandlersDebugHooks(false,true,false);
Мониторинг всех отключений отменяет только:
setJQueryEventHandlersDebugHooks(false,false,true);
Примечания / примечание:
- Используйте это только для отладки,отключите его при использовании в окончательной версии продукта
- Если вы хотите увидеть все события, вы должны вызывать эту функцию сразу после загрузки jQuery
- Если вы хотите видеть только меньше событий, выможете вызвать функцию в нужное время
- Если вы хотите выполнить ее автоматически, place () ();вокруг функции
Надеюсь, это поможет!; -)