javascript - js代码写在HTML正常,分离成js文件再在HTML中引用不起作用

 神话海青_769 发布于 2022-11-09 21:34

js代码写在HTML功能正常,分离成js文件再在HTML中引用却不起作用

js代码片段,功能是调用高德地图JS API,并做些布局调整

var map = new AMap.Map("container", {
    resizeEnable: true,
    zoomEnable: true,
    center: [116.397428, 39.90923],
    zoom: 11
});

js写在html页面正常的全部代码




    
    
    
    毕业生租房
    
    
    
    
    
    
    



    

公交+地铁 地铁

***这是js代码片段***

js分离成文件被HTML引用的出现问题的全部代码




    
    
    
    毕业生租房
    
    
    
    
    
    
    
    
    ***引用js文件代码***
    



    

公交+地铁 地铁

高德API没有调用成功

5 个回答
  • 楼主把页面中的js代码变成文件之后,也要放在页面底部和之前相同的位置的

    2022-11-12 01:46 回答
  • 因为按顺序是从上到下加载元素,调用高德api时的那个

    var map = new AMap.Map("container",{})
    

    其中的 container 是个元素id吧?界面在未加载完之前就使用id,当然不可能取到。
    所以现在一般都把js放在body最后几行,你F12打开这个网站看看源码部分

    2022-11-12 01:46 回答
  • 要等地图api回调成功在试试

    2022-11-12 01:46 回答
  • 调用js脚本放在底部

    2022-11-12 01:46 回答
  • 最近好多这种问题啊
    之所以空白,是因为浏览器读完了你的js代码,但<script>标签下面的body都没读到。里面的dom结构也没有构建起来,不管是jq还是高德地图的参数还是简简单单的document.getElementById('container')都不会找到任何结果
    你可以试试:

        <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
        <title>毕业生租房</title>
        <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css?1.2.1" />
        <link rel="stylesheet" href="http://cache.amap.com/lbs/static/jquery.range.css?1.2.1" />
        <script src="http://cache.amap.com/lbs/static/jquery-1.9.1.js?1.2.1"></script>
        <script src="http://cache.amap.com/lbs/static/es5.min.js?1.2.1"></script>
        <script src="http://webapi.amap.com/maps?v=1.3&key=e9b08cbf29e4dc01af20a4f6a0299a62&plugin=AMap.ArrivalRange,AMap.Scale,AMap.Geocoder,AMap.Transfer,AMap.Autocomplete"></script>
        <script src="http://cache.amap.com/lbs/static/jquery.range.js?1.2.1"></script>
        <style>
        .control-panel {
            position: absolute;
            top: 30px;
            right: 20px;
        }
    
        .control-entry {
            width: 280px;
            background-color: rgba(119, 136, 153, 0.8);
            font-family: fantasy, sans-serif;
            text-align: left;
            color: white;
            overflow: auto;
            padding: 10px;
            margin-bottom: 10px;
        }
    
        .control-input {
            margin-left: 120px;
        }
    
        .control-input input[type="text"] {
            width: 160px;
        }
    
        .control-panel label {
            float: left;
            width: 120px;
        }
    
        #transfer-panel {
            position: absolute;
            background-color: white;
            max-height: 80%;
            overflow-y: auto;
            top: 30px;
            left: 20px;
            width: 250px;
        }
        </style>
        <!--把js放在这里,肯定找不到任何id为container的任何元素-->
        <script>
        var map = new AMap.Map("container", {
            resizeEnable: true,
            zoomEnable: true,
            center: [116.397428, 39.90923],
            zoom: 11
        });
        </script>
    </head>
    
    <body>
        <p id="container"></p>
        <p class="control-panel">
            <p class="control-entry">
                <label>选择工作地点:</label>
                <p class="control-input">
                    <input id="work-location" type="text">
                </p>
            </p>
            <p class="control-entry">
                <label>选择通勤方式:</label>
                <p class="control-input">
                    <input type="radio" name="vehicle" value="SUBWAY,BUS" onClick="takeBus(this)" checked/> 公交+地铁
                    <input type="radio" name="vehicle" value="SUBWAY" onClick="takeSubway(this)" /> 地铁
                </p>
            </p>
            <p class="control-entry">
                <label>导入房源文件:</label>
                <p class="control-input">
                    <input type="file" name="file" onChange="importRentInfo(this)" />
                </p>
            </p>
        </p>
        <p id="transfer-panel"></p>
        
        
        
    </body>
    </html>

    最开始你把js放在底部,浏览器读已经读了js代码上面的那些标签,也构建起了dom树,能够让js去寻找。所以高德地图的调用没问题。

    • 解决办法:

      • 如上面几位所说的:把所有js统统放底部,这样不仅不怕dom树尚未构建导致的查找元素失败,也可以先让浏览器将css和html结合后的样式先渲染出来,避免某个js文件过大,加载时间长,导致页面长时间空白引起的不好的用户体验。

      • 其次就是给你主要执行的代码放在window.onload或者$(function(){})里面,这样是等待页面全部元素或者dom结构出来之后再执行你的代码。因为浏览器已经将html渲染进页面了,所以在执行js代码的时候,不怕找不到元素。

    2022-11-12 01:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有