javascript函数无法从外部文件访问

时间:2016-10-29 17:16:57

标签: javascript jquery

这可能是一个愚蠢的初学者的问题,但它让我发疯。简化后,代码为:

  1. 我有一个index.php,在内联脚本中(位于head元素中),定义了一些JS函数。

    <script type="text/javascript">
      $(function(){ 
        // other code
        var popup = function(message,color){
          $(".title").css({"color": "beige" });
          $(".popup_alert").css({"background-color": color});
          $( ".popup_alert" ).append(message);
    
    
          $(".popup_alert").removeClass("offscreen").delay(800).queue(function(){
            $(this).addClass("offscreen").dequeue();
            $(this).empty();
            $(".title").css({"color": "#444" });    
          });
        };
      };
    </script>
    
  2. <body>的最底部,我正在加载一个外部JS文件,其中发生了一些JQuery:

    <script src="ajaxToDB.js" type="text/javascript"></script>
    

    JQuery不是问题。它已加载,此外部文件中的其他功能正在运行。

  3. 在这个链接文件中,我无法调用index.php中定义的函数。

    popup("test",orange);
    

    将产生控制台错误“Uncaught ReferenceError:popup is not defined”

  4. 这是正常的吗?我已经将ajaxToDB.js中的所有内容都包装在了一个 $(function(){...});我读到这会强制页面首先加载,但无济于事......

    我忽略了什么愚蠢的细节?!

1 个答案:

答案 0 :(得分:0)

感谢@ guest271314,我在JS结构中吸取了教训:

以前,我已将整个代码包装在主文档的脚本标记内$(function(){};这个我认为是“必要的”,因为脚本标记放在head元素内,否则文档不会已经准备好了。

当使用另一个外部JS文件时,这种技术现在阻止外部代码引用内联声明的函数,因为这些函数现在“等待”文档的其余部分准备就绪,包括外部文件(然后引用到一个尚未申报/“未决”的主要功能)。

哇。

删除$(function(){};换行并将脚本元素移动到正文的底部解决了问题。我想这应该是第一位的...... 升级