这基本上是我正在建造的图书馆。在这个模块中,我将尝试构建一个调试助手库来帮助我调试。
我的问题是,当调用FDL.D.ListEvents()
时会发生一些尴尬的事情:
1)如果我包含足够的
_logEvent()
个电话,最后几个会在控制台停止关闭他们的小组,这使得它完全不可读。2)它“决定”列出的事件少于实际事件。
当我使用_logEvent()
时,例如,仅使用mouseevents,它会将它们列为“正确”,或者至少以我希望函数工作的方式,显示和计算大约20个事件在DOM上(虽然时间跨度被确定为零,这有点奇怪)。
显然我太危险了 图片 :( 编辑:!现在我可以!
输出图片:
当我用完整的事件列表调用该函数时, 我得到了这种奇怪的输出格式:
以下是lib的独立部分(你可以运行它)应该做的魔法
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
编辑:我使用group()调用更改了groupCollapsed()调用,但确实有效。现在我面临一个不同的问题,我应该如何制作它,只要绑定函数相同,它只为每个事件名称显示一次绑定?
例如,如果某个地方我们有$(":input").click(function(){alert("Clicked!");});
我希望_logEvents("onclick")
只显示一次函数和选择器,但显示绑定的次数。例如,如果我们有4个输入,则输出为:
jQuery(:input)Len:1 function(){alert(“Clicked!”);}