javascript - js代码写在HTML正常,分离成js文件再在HTML中引用不起作用
大家讲道理
大家讲道理 2017-04-11 12:38:39
[JavaScript讨论组]

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代码,但<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" />
    <link rel="stylesheet" href="http://cache.amap.com/lbs/static/jquery.range.css" />
    <script src="http://cache.amap.com/lbs/static/jquery-1.9.1.js"></script>
    <script src="http://cache.amap.com/lbs/static/es5.min.js"></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"></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代码的时候,不怕找不到元素。

阿神

调用js脚本放在底部

阿神

要等地图api回调成功在试试

怪我咯

因为按顺序是从上到下加载元素,调用高德api时的那个

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

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

ringa_lee

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号