读书人

在一个js文件中引用另一个js文件(此文

发布时间: 2013-12-19 00:33:34 作者: rapoo

在一个js文件中引用另一个js文件(此文件仅包含一个js数组),怎么实现,这种方法有没有什么问题
如题

现在需要做一个二级联动的菜单,想先用一个js文件来存放这个数组 然后再另一个写方法的页面调用这个文件和数组,应该怎么做

这种方式有没有什么问题? 有没有更好的解决办法?

数组js: arr.js


var br = new Array();

br[1] = new Array();//身份信息
br[1][1] = "身份证明不清晰";
br[1][2] = "需补充二代身份证";
br[1][3] = "申请人有两个身份证号码(非正常升位),需补充派出所卡具的户籍证明";
br[1][4] = "身份证信息录入有误";
br[1][5] = "其他";


方法js

function htyy(obj){
//这里怎么获得br这个数组
var zhuyuanyin = $(obj).val();
var ziyuanyin_html = "";
var ziyuanyin_obj = br[zhuyuanyin];
$.each($(ziyuanyin_obj), function(i, n){
ziyuanyin_html += "<option value='"+i+"'>"+n+"</option>";
});
$("select[name='htyy_2']").html(ziyuanyin_html);
}


[解决办法]
a.js,你的数组文件

b.js
document.write ('<script src="a.js"></script>')
//注意使用a.js数组的代码要放到window.onload中,动态输出的script不会挂起本js文件后续代码的执行
window.onload=function(){
//your code use a.js array
}

[解决办法]
<script>
var flag=false;
var loading = false;
var error = false;
var time = null;
function success(){
flag=true;
loading = 'over';

};
function error(){
error=true;
}
function getData(){
$.ajax({
url: 'arr.js',
dataType: "script",
success: success,
error : error
});
}


function htyy(obj){
if(!flag){
if(error){
alert('error');
return;
}
if(loading){
if(loading == 'over'){
clearInterval(time);
}
return;
}else{
loading = true;
getData();
time = setInterval(jQuery.proxy(htyy,null,obj),500);
return;
}
}else{
clearInterval(time);
}

var $a = br;
var $b = obj;

/*
var zhuyuanyin = $(obj).val();
var ziyuanyin_html = "";
var ziyuanyin_obj = br[zhuyuanyin];
$.each($(ziyuanyin_obj), function(i, n){
ziyuanyin_html += "<option value='"+i+"'>"+n+"</option>";
});
$("select[name='htyy_2']").html(ziyuanyin_html);
*/
}
htyy({name:'j',addr:'t'});

</script>

[解决办法]
// 动态导入js
function include(src,encoding,fun)
{
var s = document.createElement('script');
s.type='text/javascript';
s.charset=encoding; //'gb2312';
s.src = src;
var tags =document.getElementsByTagName('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);
};
------解决方案--------------------


在你的代码中,我们看到了非原生 js 的元素 $
权且当做你引入了 jquery 框架吧

而 jquery 已经提供了动态加载 js 文件的功能
见 http://www.w3school.com.cn/jquery/ajax_getscript.asp

如果不是 jquery 框架,也完全可以通过原生的 js 实现
设一个带有 id 的script 标记
在程序中动态修改它的 src 属性就可完成 js 文件的动态加载
不过这个加载过程是异步的,你需要做些处理以确定 js 文件已加载完成了

当然你也可以采用 #6 的动态加入 script 节点的方法。
但估计你看不懂

读书人网 >JavaScript

热点推荐