2014-09-05 78 views
1

我试图追踪一些非常复杂的Javascript中的问题,我需要找到所有在当前屏幕上处于活动状态的jQuery(document).ready(事件,因为其中一个事件导致了问题。在jQuery中列出Document Ready事件

我刚才问了一个关于在jQuery上访问事件的常见问题,并得到了一个很好的答案,但不幸的是它仍然没有解决我的具体问题。

我现在有:

> jQuery._data(document).events 

将返回:

Object {mouseup: Array[1], touchstart: Array[2], touchmove: Array[1], touchend: Array[1], click: Array[1]…} 
    MSPointerOver: Array[1] 
    click: Array[1] 
    mousemove: Array[1] 
    mouseup: Array[1] 
    pointerover: Array[1] 
    touchend: Array[1] 
    touchmove: Array[1] 
    touchstart: Array[2] 
    __proto__: Object 

但是我正在寻找作为注册文档准备事件列表使用jQuery(document).ready(并没有这些似乎那是...

+0

你可以劫持/拦截的准备方法和控制台日志调用呢? – 2014-09-05 14:04:49

+0

它们可能在jQuery中组合成一个事件处理程序。您最好在'ready'方法中指定jQuery的源代码并查看它从哪里调用。请注意''.''上的变体就像'$(function(){您的DOM就绪代码});'可能会经历一个稍微不同的代码路径。 – 2014-09-05 14:14:48

回答

1

那么,假设你有权访问源代码,你可以覆盖$.fn.ready

jQuery.fn.ready = function(fn) { 
    // log the argument 
    window.console && console.log(fn); 

    // preserve default behaviour 
    jQuery.ready.promise().done(fn); 

    return this; 
}; 

确实,当然,需要包括实际.ready()电话

例如任何之前:http://jsfiddle.net/49uksstv/

1

看到这个职位readylist-is-no-longer-exposed-in-1-4。在在行3481 jQuery的1.11.1.js,

readyList = jQuery.Deferred(); 

虽然是能够与

function evt() { 
    $(document) 
    .on("click", function(e) { 
     alert(1); 
    }); 
    alert(2); 
}; 

    $(document).on("ready", evt); 
    console.log(jQuery._data(document 
       , "events").ready[0] 
       , jQuery._data(document 
       , "events").ready[0].handler); 

收集有关.ready()event功能数据,其中

jQuery._data(document, "events").ready[0].handler 

将文evt()

但是,如果试试

$(document).on("ready", evt1, evt2); 

evt将被注册为event.data,而不是作为类型function

可能尝试创建对象或功能的阵列,的.ready或定制event外,利用on编译连接功能

添加功能到一个数组,然后dequeue函数的数组通过$.each()调用jQuery._data(document).events

.ready出现jQuery.Deferred(),可以创建自定义的延迟对象,调用的.isReady检查,或者叫在一定条件下与$.holdReady(true)$.holdReady(false);或者在函数通过条件数组中的每个函数之后;返回正确的init类型的值?

或者,不利用.ready(),只有利用定制.on()事件,或自定义的递延与检查阵列init型值的功能document条件解决?

尝试

function evt() { 
    $(document) 
    .on("click", function(e) { 
     alert(1); 
    }); 
    alert(2); 
}; 

$(document).on("ready", evt); 
console.log(jQuery._data(document 
      , "events").ready[0] 
      , jQuery._data(document 
      , "events").ready[0].handler); 

的jsfiddle http://jsfiddle.net/guest271314/c4z8pv9p/

+0

感谢您的回答,虽然我发现它有点难以遵循,但仍然非常有帮助。我现在在家,但我可以在星期一正确地尝试。 – 2014-09-05 18:27:41

相关问题