簡體   English   中英

為什么 $(document).ready 不為我開火?

[英]Why is $(document).ready not firing for me?

在一個 php 文件中,我使用include來包含以下 js.php 文件,在此之前我已經包含了 jquery 文件。

<script type="text/javascript">

$(document).ready(function(){
     alert("hello");
});
</script>

但它不起作用。 為什么? 當我跳過 $(document).ready 函數時,它可以工作。

但我需要里面的jquery代碼。 怎么了?

根據您所說的,最可能的答案是核心 jQuery 文件實際上並未正確包含在頁面中。 你需要這樣的東西:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

很有可能,這是缺失的或輸入錯誤的。

另一個會默默失敗的原因,並且所有剩余的回調從未調用過:

$(document).ready(null);

因此,請檢查您是否有返回 null 的變量或語法錯誤。 像這個:

$(document).ready(function($){}(jQuery));

請注意,上面的函數被立即調用並返回 undefined 。

  1. 檢查 jQuery 是否正確加載。
  2. 查看瀏覽器的進度條:它可能正在加載一些計數器,並且文檔在加載之前還沒有准備好:這通常發生在外部資源很慢的時候。
  3. 試試$(function(){ alert(...); }); 以防萬一...
  4. 在此 onload 綁定之前檢查您是否有 JS 錯誤。 使用 Firefox 的 FireBug 插件檢查一下。

還要注意您如何定義 jquery 包含標記。 似乎出於某種原因,您需要使用兩個單獨的標簽打開和關閉標簽。 使用一個標簽關閉它似乎不起作用:

作品:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>

不起作用:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"/>

我也遇到了類似的問題,這就是我所做的。

確保在您的 javascript 文件中定義回調函數之后放置document.ready

在這里, init 在解析 document.ready 時尚未定義。

//won't work
$(document).ready(init);
var init = function() {
   console.log('init not called');
}

正確方法:

//Works
var init = function() {
   console.log('document is ready');
}
$(document).ready(init);

注意 $(document).ready(init) 放在最后。

是的,我注意到有時會出現問題,我為此編寫了安全解決方案,解決了這個問題。

// jquery plugin 'jquery.ready.fix.js'
// @author Szymon Działowski
;(function ($) {
    $.fn.ready.old || $(function (r) {
        r = $.fn.ready;
        $.fn.ready = function (fn) {    $.isReady ? fn() : r(fn);    };
        $.fn.ready.old = r;
    });
})(jQuery);

之后,您可以運行代碼:

$(function () {alert('go')})

它總是發出警報。

PS:這是一種叫做“鴨子沖孔”的技術,更多關於: http : //www.paulirish.com/2010/duck-punching-with-jquery/

遵循 Zakas 的拋出 JavaScript 錯誤的藝術,我開始在 JavaScript 中拋出自己的錯誤,以此作為查找 JS 問題的方法。

但不幸的是,對於站點的不相關部分,這種方法開始導致 jQuery ready() 函數默默地失敗。 :(

我了解到以下情況有所不同:

throw new Error()

不同於

console.error()

所以,我開始使用console.error(),我仍然在控制台中得到紅色高亮。

要檢查的另一點:也許您的程序中有 PHP 錯誤。 PHP 致命錯誤退出腳本並且$(document).ready永遠不會被執行。

根據您的服務器設置或 CSS,您可能看不到致命錯誤消息。

在我的情況下, document.ready 沒有被調用,因為 Ajax 請求將 html 表單發送到服務器,並且只收到了部分文檔 - 並且在 ajax 請求之后沒有調用文檔就緒。

因此,重新加載的那部分上的一些按鈕不再綁定到事件 .click() atc.. 因為這些按鈕是新的,並且這些事件的綁定僅在第一次文檔准備好期間被調用 - 不適用於 AJAX。

剛剛出現這個問題,結果是腳本標簽中的拼寫錯誤:

<script type="text/javscript">

請注意 javascript 中缺少的“a”。 改為簡單:

<script>

修復了問題。

如果以上都不起作用,另一個骯臟的技巧是將您的函數包裝到 SetTimeOut 函數中,而無需任何時間,這只會在當前調用堆棧完成執行后將代碼排隊運行

     setTimeout(function(){
        FillOpenTranscriptionTasks();
    });

我已經看到這個問題是由帶有自關閉標簽的 iframe 引起的。

這很好:

<iframe src="http://..."></iframe>

這不是,並導致頁面上的所有 JS 靜默失敗:

<iframe src="http://..." />

而不是 $( document ).ready( function() { ... } );

嘗試

$( 文檔 ).ready( abc() );

函數 abc() { .... }

為我工作。我自己搜索了很多地方,但找不到解決方案。 隨機試了一下,成功了!!

我遇到了這樣的問題,只是將<script type="text/javascript">更改為<script type="javascript">並且所有問題都消失了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM