高手们,动态加载脚本后找不到加载的对象,怎么解决?JScript code//jquery.common.js里面的方法include: fun
高手们,动态加载脚本后找不到加载的对象,怎么解决?
- JScript code
//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' }); } } } }- HTML code
<!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方法引用,请问大家怎么解决。
[解决办法]
$.include(["/Dialog2/skins/default.css", "/Dialog2/jquery.artDialog.js"]);
从$(function(){});中移出试试。
[解决办法]
把URL写全,比如
$.include(["/Dialog2/skins/default.css", "http://theforever.csdn.net/Dialog2/jquery.artDialog.js"]);
[解决办法]
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(){/**回调函数*/});
[解决办法]
include 是异步导入js.
js 没加载完毕,你下面调用,当然有问题。
解决办法:
1、回调函数
2、递归 setTimeout 判断是否加载完毕
楼上说的对 你试试看
