如何解决这个范围问题: 我正在尝试更新一个旧项目。 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);
根据您的提示,我通过添加
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