我遇到了 jQuery 的 document.ready 触发函数的问题。我不确定这是由于 jQuery 还是由于浏览器的行为,但会发生这种情况:当您尝试使用 .append() 方法动态加载脚本并为 document.ready() 设置处理程序时, document.ready() 事件将在加载外部脚本/css 文件之前触发。这不适用于同一域中的脚本/css 文件 - 如果它们位于同一域中,则 document.ready 触发器将等待它们加载。
这是显示错误的代码示例:
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
var html = '<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js" type="text/javascript"><' + '/script>'
+ '<script type="text/javascript">$(document).ready(function() {alert(typeof jQuery.ui);})</' + 'script>';
$('body').append(html);
});
</script>
</body>
</html>
我们没有收到带有“对象”的警报,而是收到带有“未定义”的警报。
谢谢你和亲切的问候。
编辑:其他人遇到了类似的问题,他们使用的解决方案首先加载外部脚本,然后加载 HTML/纯 JS。链接是:http ://snipplr.com/view/43449/load-external-scripts-first-for-injected-dom-html-content/ 。无论如何,我对这个解决方案不满意,因为它意味着代码中的一些更改,我不确定它是否在所有浏览器上都是 100% 可靠的。