[英]jQuery document.ready() not firing for dynamically loaded content
[英]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 。
$(function(){ alert(...); });
以防萬一...還要注意您如何定義 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.