2014-09-05 56 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

相關問題