解决使用 jQuery 就绪函数时的范围问题

问题描述 投票:0回答:1

如何解决这个范围问题: 我正在尝试更新一个旧项目。 HTML 文件包含 JS 文件。 JS 中的一些代码运行后,它会从 HTML 回调函数

myFunc()

在新代码中,我需要将

jQuery ready function
添加到 HTML 文件中。 所以我收到错误

  jQuery.Deferred exception: myFunc is not defined 
  

为了解决这个范围问题,我可以在 JS 代码(或 HTML 代码?)中进行最小的更改是什么?

编辑:所有代码必须位于就绪处理程序中,因为它取决于文档就绪

EDIT2:HTML 脚本中有很多函数相互调用,所以我不能只更改“取出”一个函数并将其放在就绪处理程序之外

我的 HTML 文件:

<html>
<head>
  ... html code ...
  <script src="/my.js"></script>
</head>
<body>
  ... html code ...
  <script>
  $( document ).ready(function() {   // <- this line was added to the new HTML file
    ...
    function myFunc() {              // was called from JS file. but now is considered undefined :(
    ...
  }
  });                                // <- this line was added to the new HTML file
  </script>

</body>
</html>

我的JS文件:

(function($){
  $(document).ready(function(){
    ...
    myFunc();
    ...
  });

})(this.jQuery);
javascript jquery
1个回答
0
投票

根据您的提示,我通过添加

window
全局函数并更改脚本的顺序来解决它。

在我的 JS 文件中:

window.myFunc(); // call a global function from another file // myFunc();

在我的 HTML 文件中:

<body>
  ... html code ...
  <script>
  $( document ).ready(function() {   // <- this line was added to the new HTML file
    ...
    function myFunc() {              // called from JS file.  
    }
    window.myFunc = myFunc;...
  }
  });                                // <- this line was added to the new HTML file
  </script>
<script src="/my.js"></script>       // verify that window.myFunc is already declared
© www.soinside.com 2019 - 2024. All rights reserved.