为什么我的外部javascript方法说它未定义?

时间:2015-12-09 22:18:40

标签: javascript html

我有这个外部方法,它会根据有效的屏幕大小加载正确的CSS文件。当我添加更多文件夹/页面时,我意识到我需要在调用它时指定多少个文件夹,这样才能找到CSS文件。它适用于一个文件夹深的页面,它只有一行文本以确保它被加载。当我尝试加载包含图片和内容的索引页面时,它会加载除CSS文件之外的所有内容" ReferenceError:Start未定义"。为什么没有定义?请严格按照javascript保留所有解决方案,我不想在这个项目中使用jQuery。

以下是头标记中的HTML

<script src="../Scripts/Load_CSS_Template.js"></script>
<script>Start(0);</script>

这是外部javascript

function Start(Folders_Deep)
{ 

    if (Folders_Deep == "undefined")
    {
        console.log("I was not defined");
    }
    else
    {
        var Prefix = "";

        if(Folders_Deep == 1)
        {
            Prefix = "../";
        } 

        console.log("Browser Screen Width: " + window.innerWidth);
        console.log("Hostname: " + window.location.hostname);
        console.log("Folders_Deep: " + Folders_Deep);
        console.log("Prefix: " + Prefix);

        if (window.innerWidth <= '1400')
        {
            Get_CSS_File(Prefix + 'Mobile_Template.css'); 
        }
        else 
        { 
            Get_CSS_File(Prefix + 'Desktop_Template.css'); 
        }
    }
}

4 个答案:

答案 0 :(得分:1)

如果您的CSS文件始终位于根目录中且JavaScript始终位于/Scripts目录中,则您不需要任何前缀,只需使用完整路径/Scripts/Load_CSS_Template.js/Mobile_Template.css/Desktop_Template.css。否则,请使用window.location找出您所在的位置并采取相应行动。

function Start(Folders_Deep) {
    var Prefix = "";

    if (undefined === Folders_Deep) {
        console.log("I was not defined");
    } else {
        if (Folders_Deep == 1) {
            Prefix = "../";
        } else if (Folders_Deep == 0) {
            Prefix = "./";
        }

        console.log("Browser Screen Width: " + window.innerWidth);
        console.log("Hostname: " + window.location.href);
        console.log("Folders_Deep: " + Folders_Deep);
        console.log("Prefix: " + Prefix);

        if (window.innerWidth <= '1400') {
            Get_CSS_File(Prefix + 'Mobile_Template.css');
        } else {
            Get_CSS_File(Prefix + 'Desktop_Template.css');
        }
    }
}

答案 1 :(得分:1)

确定。试试这个。

将其添加到html文件中的<head>部分:

<script type="text/javascript">

function getScript(src, callback) {
  var s = document.createElement('script');
  s.src = src;
  s.async = true;
  s.onreadystatechange = s.onload = function() {
    if (!callback.done && (!s.readyState || /loaded|complete/.test(s.readyState))) {
      callback.done = true;
      callback();
    }
  };
  document.querySelector('head').appendChild(s);
}

function myCallback() { Start(0); }

getScript("../Scripts/Load_CSS_Template.js", myCallback);

</script>

答案 2 :(得分:0)

如果您只想在加载文件时执行该函数(不考虑加载其他文件和对象),您只需将Start(0)调用放在Load_CSS_Template.js中的函数下面

function Start(Folders_Deep)
{ 

    if (Folders_Deep == "undefined")
    {
        console.log("I was not defined");
    }
    else
    {
        var Prefix = "";

        if(Folders_Deep == 1)
        {
            Prefix = "../";
        } 

        console.log("Browser Screen Width: " + window.innerWidth);
        console.log("Hostname: " + window.location.hostname);
        console.log("Folders_Deep: " + Folders_Deep);
        console.log("Prefix: " + Prefix);

        if (window.innerWidth <= '1400')
        {
            Get_CSS_File(Prefix + 'Mobile_Template.css'); 
        }
        else 
        { 
            Get_CSS_File(Prefix + 'Desktop_Template.css'); 
        }
    }
}

Start(0);

-------------------- [ALTERNATIVE SOLUTION] -----------------------

相反,将Start(0)放在<body onLoad="">中,一旦加载完毕,它就会被执行。 (让脚本按原样加载到html <head>部分。)

<body onLoad="Start(0)">Hello World</body>

答案 3 :(得分:0)

在加载js文件的调用中是../。我忘了我从文件夹里面的页面复制并粘贴了。一旦我删除它,它加载了脚本。