问题:
我想使用jquery在div内部通过ajax加载外部html.Its非常简单。但在我的情况下,htmls可以有很多脚本和css标签,并且只要加载html就会触发$.ajax().done()
事件,但它不会等待标记完成加载,因此依赖于这些标记的js代码会失败。
目的:
此问题的 目的是要知道是否有event
可用于了解html及其标记在这种情况下何时完全加载。
注意下面的示例是解释我的问题的示例。
请不要建议将jquery-ui移动到索引,因为这只是为了说明我的问题。
你可以在index.html
TypeError: $(...).draggable is not a function
运行<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Load remote content into object element</title>
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
<div id="siteloader">loading ...</div>
<script>
$(function() {
$.ajax({
type: 'GET',
dataType: 'html',
url: 'dynamic.html'
}).done(function(html) {
$("#siteloader")
.html(html);
//draggable fails here
$("#draggable").draggable();
});
});
</script>
</body>
</html>
时看到控制台上的错误,因为jquery ui仍在后台加载。
的index.html:
<h1>Dynamic HTML</h1>
<h2>with big js css files</h2>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<style>
.demo-description {
clear: both;
padding: 12px;
}
.ui-draggable,
.ui-droppable {
background-position: top;
}
#draggable {
width: 150px;
height: 150px;
padding: 0.5em;
}
</style>
<div id="draggable" class="ui-widget-content">
<p>Drag me around</p>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.2/d3.js" type="text/javascript">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ace.js" type="text/javascript">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.18.2/codemirror.js" type="text/javascript">
</script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js" type="text/javascript">
</script>
<script>
$(function() {
console.log('Dynamic html loaded');
});
</script>
dynamic.html:
{{1}}
答案 0 :(得分:0)
在您的第一页(从您调用ajax的地方)加载jquery ui
<head>
<meta charset="utf-8">
<title>Load remote content into object element</title>
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
// load jquery ui here
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js" type="text/javascript"></script>
</head>
.....
因为作为DOM文本插入的JavaScript将不会执行。 draggable()
正在加载dynamic.html
(jquery ui),而您在index.html
中使用draggable()
并没有draggable()
功能。您可以在index.html中加载所有必需的j,或者另一种方法是在dynamic.html
中调用{{1}}。我宁愿先去。
如果您必须执行脚本,那么您可以查看$.getScript()