在页面加载时触发多个JavaScript函数

取2

我设法创建了一个简单的地图,并在2个目的地之间标出了路线。另外,我需要拉出距离值,然后用它做一些基本的数学运算(乘以2)。一切正常,但页面加载不起作用。更准确地说,地图会在页面加载以及距离上显示,但是距离值不会被拉动,也不会乘以2。我设法使它可以在鼠标移动时工作,但这并不是完美的替代方法。

这是代码:

<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Directions</title>
    <link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet">
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&region=US"></script>
    <script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
    <script src="http://www.pengoworks.com/workshop/jquery/calculation/jquery.calculation.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function() {

            var rendererOptions = {
                draggable: false
            };
            var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);;
            var directionsService = new google.maps.DirectionsService();
            var map;

            function initialize() {

                var mapOptions = {
                    zoom: 7,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                };
                map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
                directionsDisplay.setMap(map);
                directionsDisplay.setPanel(document.getElementById('directionsPanel'));

                google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
                    computeTotalDistance(directionsDisplay.directions);
                });

                calcRoute();
            }

            function calcRoute() {

                var request = {
                    origin: 'Houston',
                    destination: 'Dallas',
                    travelMode: google.maps.DirectionsTravelMode.DRIVING
                };
                directionsService.route(request, function(response, status) {
                    if (status == google.maps.DirectionsStatus.OK) {
                        directionsDisplay.setDirections(response);
                    }
                });
            }

            function computeTotalDistance(result) {
                var total = 0;
                var myroute = result.routes[0];
                for (var i = 0; i < myroute.legs.length; i++) {
                    total += myroute.legs[i].distance.value;
                }
                total = total / 1000.
                document.getElementById('total').innerHTML = total + ' km';
            }

            google.maps.event.addDomListener(window, 'load', initialize);


            function stripint() {
                var val = $('[jsdisplay=distance]').text(); // get text content of <span jstcache="7">

                // Replace using regex instead of strings, to catch more than the first match
                val = val.replace(/\./g, "");
                val = val.replace(/,/g, ".");
                val = val.replace(/_/g, ",");

                $('#dist').val(val);
            }

            function recalc() {

                $("[id^='total_price_ht']").calc(
                // the equation to use for the calculation
                "di * 10", {
                    bind: "keyup",
                    di: $("[id^='dist']")
                }, function(s) {
                    // return the number as a dollar amount
                    return "$" + s.toFixed(2);
                });
            }

            $('#content').mousemove(function() {
                stripint();
                recalc();
            });

            stripint();
            recalc();
        });
    </script>
</head>

<body>
    <div id="content">
        <p>Distance: <span id="total"></span>

        </p>
        <input type="text" value="0" name="dist" id="dist" />
        <div id="total_price_ht_0" class="price">$0.00</div>
        <div id="map-canvas" style="width:100%; height:500px"></div>
        <div id="directionsPanel" style="width:100%; height:auto"></div>
    </div>
</body>

巴瓦兹

首先,您不需要使用,$(document).ready()因为您已经将初始化函数绑定到窗口的onLoad事件。google.maps.event.addDomListener(window, 'load', initialize);

您需要等待直到计算出方向和距离,您才真正不需要从directionsPanel读取它,您可以直接从API响应中读取所需的任何内容。

calcRoute像这样使用回调

directionsService.route(request, function(response, status) {
  if (status == google.maps.DirectionsStatus.OK) {
    directionsDisplay.setDirections(response);
    dist = response.routes[0].legs[0].distance.text;
    stripint(dist);
    recalc();
  }
});

您还需要向您添加dist参数strprint

function stripint(val) {

  // Replace using regex instead of strings, to catch more than the first match
  val = val.replace(/\./g, "");
  val = val.replace(/,/g, ".");
  val = val.replace(/_/g, ",");

  $('#dist').val(val);
}

因此您的新代码不会使用document.ready并在API响应时立即计算价格。

<script>标签:

var rendererOptions = {
    draggable: false
};
var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
var directionsService = new google.maps.DirectionsService();
var map;

function initialize() {

    var mapOptions = {
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById('directionsPanel'));

    google.maps.event.addListener(directionsDisplay, 'directions_changed', function () {
        computeTotalDistance(directionsDisplay.directions);
    });

    calcRoute();
}

function calcRoute() {

    var request = {
        origin: 'Houston',
        destination: 'Dallas',
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            dist = response.routes[0].legs[0].distance.text;
            stripint(dist);
            recalc();
        }
    });
}

function computeTotalDistance(result) {
    var total = 0;
    var myroute = result.routes[0];
    for (var i = 0; i < myroute.legs.length; i++) {
        total += myroute.legs[i].distance.value;
    }
    total = total / 1000.
    document.getElementById('total').innerHTML = total + ' km';
}

google.maps.event.addDomListener(window, 'load', initialize);


function stripint(val) {

    // Replace using regex instead of strings, to catch more than the first match
    val = val.replace(/\./g, "");
    val = val.replace(/,/g, ".");
    val = val.replace(/_/g, ",");

    $('#dist').val(val);
}

function recalc() {

    $("[id^='total_price_ht']").calc(
        // the equation to use for the calculation
        "di * 10", {
            bind: "keyup",
            di: $("[id^='dist']")
        }, function (s) {
            // return the number as a dollar amount
            return "$" + s.toFixed(2);
        });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript函数在页面加载时触发,而不是单击时触发

来自分类Dev

在页面加载时触发两个 javascript 函数的问题

来自分类Dev

Javascript onFocus在页面加载时触发

来自分类Dev

Javascript onclick在页面加载时触发

来自分类Dev

JavaScript onclick事件在页面加载时触发

来自分类Dev

在页面加载时触发提交函数触发的js

来自分类Dev

页面加载时正在调用Javascript函数

来自分类Dev

页面加载时仅加载一个JavaScript函数。

来自分类Dev

页面加载时仅加载一个JavaScript函数。

来自分类Dev

我的JavaScript函数无法在页面刷新时触发

来自分类Dev

在页面加载时加载Javascript

来自分类Dev

在页面加载时使用Shopify运行Javascript函数

来自分类Dev

Javascript函数不会在页面加载时执行

来自分类Dev

页面动态加载内容时如何运行javascript函数

来自分类Dev

加载html页面时从外部文件调用Javascript函数

来自分类Dev

ngOnInit未在页面加载时触发

来自分类Dev

在页面加载时停止触发事件

来自分类Dev

页面加载时触发jquery事件

来自分类Dev

在页面加载时停止触发事件

来自分类Dev

如何在页面加载时触发模态

来自分类Dev

当更多内容加载到页面上时,如tumblr和无限滚动,如何触发函数

来自分类Dev

当更多内容加载到页面(如tumblr和无限滚动)时,如何触发函数

来自分类Dev

如何防止页面加载时触发Onchange触发

来自分类Dev

加载页面后自动加载javascript函数

来自分类Dev

为什么页面加载时仅触发这些javascript行之一?

来自分类Dev

javascript中的事件监听器不会触发,除非页面加载时

来自分类Dev

为什么页面加载时仅触发这些javascript行之一?

来自分类Dev

JavaScript事件监听器在页面加载时触发,而不是click事件

来自分类Dev

从javascript触发自动下载在页面加载时不起作用

Related 相关文章

  1. 1

    Javascript函数在页面加载时触发,而不是单击时触发

  2. 2

    在页面加载时触发两个 javascript 函数的问题

  3. 3

    Javascript onFocus在页面加载时触发

  4. 4

    Javascript onclick在页面加载时触发

  5. 5

    JavaScript onclick事件在页面加载时触发

  6. 6

    在页面加载时触发提交函数触发的js

  7. 7

    页面加载时正在调用Javascript函数

  8. 8

    页面加载时仅加载一个JavaScript函数。

  9. 9

    页面加载时仅加载一个JavaScript函数。

  10. 10

    我的JavaScript函数无法在页面刷新时触发

  11. 11

    在页面加载时加载Javascript

  12. 12

    在页面加载时使用Shopify运行Javascript函数

  13. 13

    Javascript函数不会在页面加载时执行

  14. 14

    页面动态加载内容时如何运行javascript函数

  15. 15

    加载html页面时从外部文件调用Javascript函数

  16. 16

    ngOnInit未在页面加载时触发

  17. 17

    在页面加载时停止触发事件

  18. 18

    页面加载时触发jquery事件

  19. 19

    在页面加载时停止触发事件

  20. 20

    如何在页面加载时触发模态

  21. 21

    当更多内容加载到页面上时,如tumblr和无限滚动,如何触发函数

  22. 22

    当更多内容加载到页面(如tumblr和无限滚动)时,如何触发函数

  23. 23

    如何防止页面加载时触发Onchange触发

  24. 24

    加载页面后自动加载javascript函数

  25. 25

    为什么页面加载时仅触发这些javascript行之一?

  26. 26

    javascript中的事件监听器不会触发,除非页面加载时

  27. 27

    为什么页面加载时仅触发这些javascript行之一?

  28. 28

    JavaScript事件监听器在页面加载时触发,而不是click事件

  29. 29

    从javascript触发自动下载在页面加载时不起作用

热门标签

归档