高手们,动态加载脚本后找不到加载的对象,怎么解决?

datahandler2 2012-10-19 04:53:03

//jquery.common.js里面的方法
include: function (file) {
var files = typeof file == "string" ? [file] : file;
for (var i = 0; i < files.length; i++) {
var name = files[i].replace(/^\s|\s$/g, "");
var att = name.split('.');
var ext = att[att.length - 1].toLowerCase();
var isCSS = ext == "css";
var tag = isCSS ? "link" : "script";
var attr = isCSS ? " type='text/css' rel='stylesheet' " : " language='javascript' type='text/javascript' ";
var link = (isCSS ? "href" : "src") + "='" + name + "'";
if ($(tag + "[" + link + "]").length == 0) {
if (isCSS) {
var head = document.getElementsByTagName("head").item(0);
var css = document.createElement("link");
css.href = name;
css.rel = "stylesheet";
css.type = "text/css";
head.appendChild(css);
}
else {
$.ajax({ type: 'GET', url: name, async: false, dataType: 'script' });
}
}
}

}



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>测试页面</title>
<script src="jquery-1.8.0-vsdoc.js" language="javascript" type="text/javascript" charset="utf-8"></script>

<script src="jquery.common.js" language="javascript" type="text/javascript" ></script>


</head>
<body>
<script language="javascript" type="text/javascript">
$(function(){
$.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
});
function test() {
if (typeof ($.dialog) == undefined|| ($.dialog==null)) {
alert(22);
setTimeout(function () { $.dialog.alert("正在加载..."); }, 2000);

}
else {

$.dialog.alert("正在加载...");
}
}

</script>
<input type="button" value="获取dialog对象" onclick="test();"/>

</body>


$.dialog 对象写在jquery.artDialog.js文件当中,其中这个脚本文件是通过jquery.common.js 的$.include方法引用进去
为什么始终都无法获取$.dialog这个对象呢,也就是说jquery.artDialog的里面所有方法对象都无法在html页面中调用呢,
当然如果直接引用jquery.artDialog.js到html页面是正常的。

但我就要通过jquery.common.js 的$.include方法引用,请问大家怎么解决。
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a8509190 2012-10-20
  • 打赏
  • 举报
回复
include 是异步导入js.

js 没加载完毕,你下面调用,当然有问题。

解决办法:
1、回调函数
2、递归 setTimeout 判断是否加载完毕
楼上说的对 你试试看
hch126163 2012-10-20
  • 打赏
  • 举报
回复
include 是异步导入js.

js 没加载完毕,你下面调用,当然有问题。

解决办法:
1、回调函数
2、递归 setTimeout 判断是否加载完毕


// 动态导入js
function include(src,encoding,fun)
{
var s = $C('script');
s.type='text/javascript';
s.charset=encoding; //'gb2312';
s.src = src;
var tags =$$('head');
if(typeof(fun)=='function'){
if( document.all ){
s.onreadystatechange = function(){
if(/(complete|loaded)/.test(this.readyState)){
fun(); s.onreadystatechange = null; s.parentNode.removeChild(s);
}};
}else{
s.onload = function(){ fun(); s.onload = null; s.parentNode.removeChild(s); };
}
}
tags[0].appendChild(s);
};


include("js 路径","js 文件编码",function(){/**回调函数*/});

  • 打赏
  • 举报
回复
把URL写全,比如

$.include(["/Dialog2/skins/default.css", "http://theforever.csdn.net/Dialog2/jquery.artDialog.js"]);
datahandler2 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
$.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
从$(function(){});中移出试试。
[/Quote]
一样不行
泡泡鱼_ 2012-10-19
  • 打赏
  • 举报
回复
$.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
从$(function(){});中移出试试。

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧