Javascript:函数未定义

时间:2016-04-16 08:26:39

标签: javascript jquery

我已经在我的网页上安装了谷歌地图元素,我希望它能够在点击链接时更改商店的位置

这里是html

<div class="mapnav">
    <h5>Select a map:</h5>
    <a href="javascript:;" class="location" onclick="resetMap(21.535176, 39.177557)">Madinah Road Branch</a>
    <a href="javascript:;" class="location" onclick="resetMap(21.535176, 49.177557)">Prince Sultan St. Branch</a>
    <a href="javascript:;" class="location" onclick="resetMap(22.535176, 39.177557)">Sharqiya Branch</a>
</div>

这里是javascript - 我已经在外部脚本的原始谷歌地图功能中定义了一个resetMap函数

function resetMap(newLatitude, newLongitude){
  //reset google map options
  var map_options = {
    center: new google.maps.LatLng(newLatitude, newLongitude),
    zoom: map_zoom,
    panControl: false,
    zoomControl: false,
    mapTypeControl: false,
    streetViewControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    scrollwheel: false,
    styles: style,
  }
  //reinizialize the map

  var map = new google.maps.Map(document.getElementById('google-container'), map_options);

  //add a custom marker to the map              
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(newLatitude, newLongitude),
    map: map,
    visible: true,
    icon: marker_url,
  });
}

我一直在控制台中获得一个未定义错误的函数。我一直在寻找许多线程,但大多数关于同一主题的内容都非常具体针对个别问题。

2 个答案:

答案 0 :(得分:0)

  

我在原始谷歌地图功能

中定义了一个resetMap功能

函数声明的范围与var类似。它没有被定义,因为你试图在全局范围内访问它,它只存在于另一个函数中。

移动它以使其成为全球性的。

答案 1 :(得分:0)

  

我在原始谷歌地图中定义了一个resetMap函数   在外部脚本上运行

如果您在function(您提到的Google地图功能)中定义了function(或任何内容),则它将不再属于全球范围。

你可以

  1. 在全局范围内定义函数(不在任何函数/方法中),
  2. 2)或者通过执行

    将方法明确地放在窗口的范围(全局范围)中
    window.resetMap = function (newLatitude, newLongitude){
    

    除非函数不在全局范围内,否则您将无法通过直接事件处理程序(如onclick属性事件处理程序)调用它

    另一种方法可能是通过addEventListener分配事件,其中方法在范围内。

    例如

    function resetMap(newLatitude, newLongitude)
    {
     //code here
    }
    //Event assignment here
    $(".mapnav a.location").bind("click", function(){  
      var lat = parseFloat($(this).attr("data-lat"));
      var long= parseFloat($(this).attr("data-long"));
      resetMap(lat, long )
    })
    

    虽然您的标记看起来像

    <a href="javascript:;" class="location" data-lat="21.535176" data-long="39.177557">Madinah Road Branch</a>