Это в основном для библиотеки, которую я строю.В этом модуле я попытаюсь создать вспомогательную библиотеку отладки, чтобы помочь мне во время отладки.
Мои проблемы здесь заключаются в том, что при вызове FDL.D.ListEvents()
происходит несколько неловких вещей:
1) Если я включу достаточное количество вызовов _logEvent()
, последние несколько перестанут закрывать свои группы на консоли, что делает его полностью нечитабельным.
2) Он "решает", что он перечислил меньше событий, чем на самом делеdid.
Когда я использую _logEvent()
, например, только для мышиных событий, они перечисляют их вроде «правильно», или, по крайней мере, так, как я ожидаю, что функция будет работать,выявление и подсчет около 20 событий в DOM (хотя временной интервал определен как ноль, что довольно странно).
Видимо, я слишком опасен, чтобы публиковать изображения :( Редактировать:! Теперь я могу!
Вывод изображения:
Когда я вызываю функцию с полным списком событий, я получаю вместо этого странный формат вывода:
Следующее будет автономной частью библиотеки (которую вы можете запустить), которая должна творить магию
var FDL = FDL || {};
// FIREBUG DEBUG LIBRARY
FDL.D = (function()
{
function _logEvents(eventName)
{
var _arr = $(":visible");
var _count = 0;
console.groupCollapsed(eventName);
_arr.each(function(idx)
{
var _el = this;
var _id = _el.id;
if(!_id){
_id = _el.tagName;
}
var _ev = eval("_el." + eventName);
if(_ev){
console.log("%o\n" + _ev + "\n\n",$(this));
_count++;
}
});
console.log(_count + " " + eventName + " events");
console.groupEnd();
return _count;
}
return {
ListEvents : function ()
{
var _start = new Date().getTime();
var _count = 0;
console.group("Events");
_count += _logEvents("onblur");
_count += _logEvents("onchange");
_count += _logEvents("onclick");
_count += _logEvents("ondblclick");
_count += _logEvents("onerror");
_count += _logEvents("onfocus");
_count += _logEvents("onkeydown");
_count += _logEvents("onkeypress");
_count += _logEvents("onkeyup");
_count += _logEvents("onmousedown");
_count += _logEvents("onmousemove");
_count += _logEvents("onmouseout");
_count += _logEvents("onmouseover");
_count += _logEvents("onmouseup");
_count += _logEvents("onresize");
_count += _logEvents("onselect");
_count += _logEvents("onunload");
var _diff = new Date(new Date().getTime() - _start).getSeconds();
console.groupCollapsed("details");
console.log(_count + " events bound");
console.log(_diff + "s runtime");
console.groupEnd();
console.groupEnd();
}
};
})();
Я попробовал несколько идей, но не смог придумать правильное решение, чтобы сделать эти _logEvent()
цепочки вызовов в ожидаемом порядке.Проблема в основном в том, что .each()
называется асинхронным, и я полагаю, что это нарушает порядок выполнения моего кода.
Спасибо за ваш вклад!<3 stackoverflow </p>
EDIT: Я изменил вызовы groupCollapsed () на вызовы group (), и это действительно сработало.Теперь я сталкиваюсь с другой проблемой, как мне сделать так, чтобы она отображала привязки только один раз для каждого имени события, если связанная функция одинакова?
Например, если где-то у нас было $(":input").click(function(){alert("Clicked!");});
Мне бы хотелось, чтобы _logEvents("onclick")
отображал функцию и селектор только один раз, но отображал, сколько раз он был связан.Например, если бы у нас было 4 входа, результат был бы:
jQuery (: input) Len: 1 function () {alert ("Clicked!");}