开发者问题收集

html 中的 Javascript 外部函数给出“函数未定义”

2017-03-23
11455

我试图从外部加载的 index.js 文件调用 html 页面内的函数,但我总是得到

Uncaught ReferenceError: displayy is not defined

在我的 html 页面内:

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

<script>
    $( document ).ready(function() {
       displayy();
    });
</script>

index.js 文件:

$( document ).ready(function() {
    alert('loaded');
      function displayy() {
    alert('executed');
    } 
 });

我也尝试过:

<script>
    window.onload = function() {
        displayy();
    };
</script>

<script>

    document.addEventListener("DOMContentLoaded", function(event) {
        displayy();
    });
</script>
3个回答

您不需要再次从脚本运行 displayy 。 以下有效:

$(document).ready(function() {
      alert('loaded');
      displayy();
      function displayy() {
        alert('executed');
      } 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Pritam Banerjee
2017-03-23

在 index.js 中,您可以使用 window 对象调用您的函数。

window.displayy = function(){ 
    return "hello!" 
}

然后您调用它 window.displayy();displayy();

更好的解决方案是在更高的范围内声明您的函数,如下所示:

var displayy;

$( document ).ready(function() {
      alert('loaded');
      displayy = function () {
       alert('executed');
      } 
 });

注意:使用全局变量不好,但它应该可以解决您的问题。请看这里: 我听说全局变量不好,我应该使用什么替代解决方案?

Jonathan Dion
2017-03-23

删除 .js 文件中的 document.ready 包装器。

我也遇到了这个问题。我在 document.ready 中调用了主 html 文件中的函数,而外部 .js 文件也将调用的函数定义包装在 document.ready 函数中。一旦我删除了 .js 文件中的包装器,它就可以正常工作了。这使得外部 .js 文件中的函数在作用域上变为全局的。

teaman
2020-05-11