为什么Javascript可以完全内联运行,但如果外部引用则不能?

为什么Javascript可以完全内联运行,但如果外部引用则不能?,javascript,html,forms,Javascript,Html,Forms,我正在尝试填充用以下内容创建的下拉表单字段: <div class="section"> <label >Province</label><br> <select id="provinces"></select> </div> 如果我将脚本放在HTML文档中,这将非常有效,但是如果我删除脚本标记并将其放在外部文件中,则不会发生任何事情。我已经从HTML文件中引用了js文件 <script

我正在尝试填充用以下内容创建的下拉表单字段:

<div class="section">
    <label >Province</label><br>
    <select id="provinces"></select>
</div>
如果我将脚本放在HTML文档中,这将非常有效,但是如果我删除脚本标记并将其放在外部文件中,则不会发生任何事情。我已经从HTML文件中引用了js文件

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

我已经确认我引用的字段是正确的

很明显,我又犯了一个愚蠢的错误。你们这些专家能告诉我哪里出了问题吗

检查是否 1) 脚本文件被正确引用(打开src位置)并且
2) 脚本标记位于主体内(理想情况下位于section元素之后)。可能是javascript代码在呈现元素之前执行

加载dom后必须执行代码,您可以选择如何执行:

  • 在页面末尾加载js

  • 在脚本标记上使用
    defer
    属性

  • 在DOM结构中创建元素之前调用脚本。

    JavaScript代码:

    外部脚本代码:(无论是在之前还是之前)


    您共享的代码没有问题。您确定要将其放在HTML后面的
    标记前面,而不需要放在
    前面。这是一个cargo cult性能技巧,仅当您不希望JS运行到最后一秒时才适用。(这个JS看起来应该在select元素可用时立即运行)。您能确认外部脚本已正确加载吗?在chrome中,使用F12开发工具并查看Sources选项卡。在控制台中会出现哪些错误?仅此一点就应该指出问题所在。正如Joe已经指出的,按F12并打开开发工具。
    window.onload=“myFunction()”
    onload
    是一个愚蠢的长度延迟,它不接受字符串作为值。您的第1点是提示,而不是要求。第2点也一样。第三点应该避免粗话,谢谢你的解释和友好的话语@比梅朗:)很高兴知道,我可以帮你。。。热烈欢迎……)
    <script type="text/javascript" src="js/formcalculations.js"></script>
    
    <script type="text/javascript">    
        var provinces = ['Gauteng', 'Limpopo', 'Western Cape', 'Northern Cape', 'Mpumalanga', 'Kwazulu Natal', 'North West', 'Eastern Cape', 'Free State'],
            select = document.getElementById('provinces');
        for (province in provinces) {
            select.add(new Option(provinces[province]));
        };
    </script>
    
    <script type="text/javascript">
        window.onload = function() {
            var provinces = ['Gauteng', 'Limpopo', 'Western Cape', 'Northern Cape', 'Mpumalanga', 'Kwazulu Natal', 'North West', 'Eastern Cape', 'Free State'],
            select = document.getElementById('provinces');
            for (province in provinces) {
                select.add(new Option(provinces[province]));
            };
        };
    </script>
    
    window.onload = function() {
        var provinces = ['Gauteng', 'Limpopo', 'Western Cape', 'Northern Cape', 'Mpumalanga', 'Kwazulu Natal', 'North West', 'Eastern Cape', 'Free State'],
            select = document.getElementById('provinces');
        for (province in provinces) {
            select.add(new Option(provinces[province]));
        };
    };