代码之家  ›  专栏  ›  技术社区  ›  bevacqua

如何正确使用。每个在这里?

  •  4
  • bevacqua  · 技术社区  · 15 年前

    这基本上是为我正在建设的图书馆。在本模块中,我将尝试构建一个调试助手库,以在调试期间帮助我。

    我这里的问题是,当 fdl.d.listevents()被调用时,会发生一些尴尬的事情:

    < Buff行情>

    1)如果我包含足够多的 \logevent() 调用,最后几个停止在控制台关闭他们的组,这使得它完全不可读。

    2)它“决定”列出的事件比实际发生的事件少。

    < /块引用>

    当我使用 >logEvent()时,例如,仅mouseEvents,它列出它们的类型为“正确”,或者至少以我期望函数工作的方式,在dom上显示和计数大约20个事件(尽管TimeSpan被确定为零,哪个是奇怪的)。

    < Buff行情>

    显然我太危险了 图像: 编辑:!现在我可以!

    < /块引用>

    输出图像:

    <>



    当我调用带有完整事件列表的函数时, 我得到了这个奇怪的输出格式:

    <>



    下面是lib的独立部分(您可以运行它),它应该可以发挥魔力

    var fdl=fdl
    
    //Firebug调试库
    
    fdl.d=(函数())
    {
    函数日志事件(eventname)
    {
    var _arr=美元(“:可见”);
    VaR计数=0;
    
    console.group已折叠(eventname);
    
    _每种排列(功能(IDX)
    {
    VAR=EL=这个;
    var _id=_el.id;
    
    如果(!){ ID){
    _ id=_el.标记名;
    }
    
    var _ev=eval(“_el.”+eventname);
    
    如果(ωEV){
    console.log(“%o\n”+“ev+”“\n\n”,$(this));
    计数+;
    }
    (});
    
    console.log(_count+“”+eventname+“events”);
    console.groupend();
    
    返回计数;
    }
    
    返回{
    ListEvents:函数()
    {
    var _start=new date().gettime();
    VaR计数=0;
    
    console.group(“事件”);
    
    _ count+=日志事件(“onblur”);
    _ count+=日志事件(“onchange”);
    
    _ count+=日志事件(“onclick”);
    _ count+=日志事件(“ondblclick”);
    
    _ count+=日志事件(“onerror”);
    _ count+=日志事件(“onfocus”);
    
    _ count+=日志事件(“onkeydown”);
    _ count+=日志事件(“onkeypress”);
    _ count+=日志事件(“onkeyup”);
    
    _ count+=日志事件(“onMouseDown”);
    _ count+=日志事件(“onMouseMove”);
    _ count+=日志事件(“onMouseOut”);
    _ count+=日志事件(“onMouseOver”);
    _ count+=日志事件(“onmouseup”);
    
    _ count+=日志事件(“onResize”);
    _ count+=日志事件(“onselect”);
    _ count+=日志事件(“onUnload”);
    
    var _diff=新日期(new date().gettime()-_start).getseconds();
    
    console.groupCollapsed(“详细信息”);
    console.log(_count+“events bound”);
    console.log(_diff+“s runtime”);
    console.groupend();
    
    console.groupend();
    }
    };
    });
    < /代码> 
    
    <> 

    我尝试了一些想法,但我无法找到正确的解决方案,以使这些logevent()按预期顺序调用链。问题主要在于.each()被称为async,我想这就是破坏代码执行顺序的原因。

    <>


    谢谢你的意见!<3堆叠溢出

    edit:我用group()调用更改了groupCollapsed()调用,它确实有效。现在,我面临一个不同的问题,我应该如何使其成为这样,只要绑定函数相同,它就只为每个事件名显示一次绑定?

    例如,如果在某个地方我们有>$(“:input”).click(function()alert(“clicked!”);} /代码>

    我想只显示一次函数和选择器,但显示绑定的次数。例如,如果我们有4个输入,输出将是:

    < Buff行情>

    jquery(:input)len:1函数()alert(“clicked!”)}

    < /块引用MPT生成调试帮助程序库,以便在调试期间帮助我。

    我的问题是FDL.D.ListEvents()被称为两件尴尬的事情发生:

    1)如果我包括足够的_logEvent()呼叫,最后几个停止在控制台关闭他们的组,这使得它完全不可读。

    2)它“决定”它列出的事件比实际少。

    当我使用yLogEvices()例如,在mouseEvents上,它列出了一些“正确的”,或者至少按照我希望函数工作的方式列出,显示并统计了DOM上大约20个事件(尽管时间跨度被确定为零,这有点奇怪)。

    显然我太危险了 图像: 编辑:!现在我可以!

    输出图像:


    Working ListEvents()



    当我调用带有完整事件列表的函数时, 我得到了这个奇怪的输出格式:


    Broken listing



    下面是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();
            }
        };
    })();
    


    我试过一些想法,但我没能想出正确的解决办法来做这些yLogEvices()按预期顺序调用链。问题主要在于.each()被称为异步,我想这就是破坏代码执行顺序的原因。



    谢谢你的意见!<3堆叠溢出

    编辑:我用group()调用更改了groupcolled()调用,它确实有效。现在,我面临一个不同的问题,我应该如何使其成为这样,只要绑定函数相同,它就只为每个事件名显示一次绑定?

    例如,如果我们在某个地方$(":input").click(function(){alert("Clicked!");});

    我想_logEvents("onclick")只显示一次函数和选择器,但显示绑定的次数。例如,如果我们有4个输入,输出将是:

    jquery(:input)len:1函数()alert(“clicked!”);}

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jochem    15 年前

    问题不在您的代码中,而是在GroupCollapsed例程中。现在使用旧的“小组”程序,你会好起来的。这个 bugreport 看起来很像你的问题。