我希望实现的效果是点击onclick事件触发调用其他JS文件,也就是说如果不点击这个事件,被调用的JS文件不会再本页执行。我已经用了两种方法都失败,第一种是用innerHTML来输出,innerHTML写入<script src='a.js'></script>代码无法执行。然后我改成用div隐藏的块来实现,虽然点击之后JS文件内容显示出来了,但是其实在你点击之前浏览器已经执行过那个JS了,只不过没有显示出来罢了。这也不是我想要的效果。
大家帮我看看有什么办法没有?因为我的那个JS文件中调用了很多图片,如果打开页面就执行的话那我就会浪费很多流量。所以我希望实现用户点击某个按钮之后才会调用我的这个JS文件。
大家帮我看看有什么办法没有?因为我的那个JS文件中调用了很多图片,如果打开页面就执行的话那我就会浪费很多流量。所以我希望实现用户点击某个按钮之后才会调用我的这个JS文件。
<script id="s1" type="text/javascript" language="javascript" src=""></script>
<script>
function loadS1()
{
document.getElementById("s1").src = "a.js"
}
</script>
<input type="button" value="click me" onclick="loadS1()">另外,你可以将整个a.js的代码写成为一个函数,点击之后调用就行了,没这么麻烦。
//动态加载JS
//@param scriptSrc JS文件地址
//@param scriptID 创建<script>标签时的ID
//@param parent 创建的<script>要插入的父元素
//@param callBack JS文件加载完成后要执行的回调
var loadScript = function(scriptSrc, scriptID, parent, callBack){
this.scriptSrc = scriptSrc;
this.scriptID = scriptID;
this.parent = parent;
this.callBack = (typeof(callBack) == 'undefined')? function(){} : callBack;
this.createScript();
}
loadScript.prototype = {
createScript: function()
{
var _self = this;
var _scriptOld = document.getElementById(this.scriptID);
if(_scriptOld){
_scriptOld.parentNode.removeChild(_scriptOld);
}
var _script = document.createElement('script');
_script.type = 'text/javascript';
_script.id = this.scriptID;
_script.src = this.scriptSrc;
if(document.all){
_script.onreadystatechange = function(){
if(/(complete|loaded)/.test(this.readyState)){
_self.callBack(_self.scriptID);
}
}
}
else{
_script.onload = function(){
_self.callBack(_self.scriptID);
}
}
this.parent.appendChild(_script);
}
}