从.js文件运行一个函数而不导入它?

时间:2015-01-12 07:08:17

标签: javascript

我想在 .js 文件中运行一个函数而不在我的页面中导入  我使用这段代码:

var js =("../../../static/js/file.js");
js.hi();

并在控制台中显示此错误:

  

未捕获的TypeError:undefined不是函数

但我有一个名为hi的函数!

1 个答案:

答案 0 :(得分:1)

方法1:使用jQuery.getScript

将jQuery.getScript()视为与CSS的@import等效的JavaScript。更进一步,使用它只在需要时加载JavaScript,并且你有一个精益组合。

样品:

if ($('a.email').length > 0){
    $.getScript('js/jquery.mailto.js',function(){
        $('a.email').mailto();
    });
}

这一小段代码将检查对象是否存在,在这种情况下,该对象是与一类电子邮件的任何锚链接。如果在页面上找到此对象,则将加载相应的.js文件(js / jquery.mailto.js)并启动回调函数($('a.email')。mailto();)。如果未找到该对象,则不会加载该脚本。这假设该片段包含在文档就绪事件中。

来源:External JavaScript on Demand With $.getScript()

所以你可以做点什么

if(condition){
  $.getScript('../../../static/js/file.js',function(){
      hi();
  });
}

方法2: Dynamically loading external JavaScript and CSS files

function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file