在jQuery中列出Document Ready事件

时间:2014-09-05 14:00:34

标签: javascript jquery

我正在尝试在一些非常复杂的Javascript中找到问题,我需要找到当前屏幕上活动的所有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(注册的文档就绪事件的列表,而这些似乎都不是......

2 个答案:

答案 0 :(得分: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 :(得分:1)

请参阅此帖readylist-is-no-longer-exposed-in-1-4。在第3481行的jquery 1.11.1.js,

readyList = jQuery.Deferred();

尽管如此,能够使用

收集有关.ready() event功能的数据
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);

,其中

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

将是evt()

的文字

然而,如果尝试

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

evt将注册为event.data,而非注册为function

可以尝试在.ready或自定义event之外创建对象或函数数组,利用on编译附加函数

通过调用dequeue中的jQuery._data(document).events,向数组添加函数,然后$.each()函数数组。

.ready显示jQuery.Deferred(),可以创建自定义延迟对象,通过.isReady检查调用,或使用$.holdReady(true)$.holdReady(false)调用某些条件;或者在函数传递条件数组中的每个函数之后;返回正确的init类型值?。

或者,不使用.ready()且仅使用自定义.on()事件,或使用数组documentinit函数'的检查条件自定义延迟解析 - 类型值?

尝试

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/