Javascript - 函数在jQuery(document).ready中不起作用(Google map geocode)

时间:2012-12-06 09:38:35

标签: javascript jquery google-maps-api-3

我有一个小的谷歌地图脚本来获取位置,来自Lat Lon对或地址,还有更新那些lat,lon和地址输入字段..

请参阅jsfiddle此处

单击“绘制”按钮时,应调用名为codeAddress()的函数。 但是在firebug控制台上我得到了:

Error: ReferenceError: codeAddress is not defined

我不明白为什么codeAddress()没有定义......

奇怪的是,如果我移动

的OUTSIDE功能

jQuery(document).ready(function(){}它有效(见jsFIDDLE

(我还需要移动var marker - 否则它只会使地图居中,并会出现marker is undefined错误;

所以我的问题很简单,我做错了什么? 为什么同一个函数在jQuery(document).ready(function(){}之外但不在内部?

还有一个伙伴问题:如何在拖动标记时更新地址输入字段(就像使用lon lat输入一样..)

更新 - 感谢所有人 - 学到了另一件重要的事情。不幸的是 - 所有这些都是有效的回答和解决方案 - 但我只能接受一个,对我而言,最容易理解的解决方案(对JS如此不熟悉 - 尽管它可能是一个不完美的做法)是@cowls再次感谢大家。

3 个答案:

答案 0 :(得分:3)

简单的解决方案是替换

function codeAddress() { ... }

codeAddress = function() { ... }

您的问题是您将codeAddress声明为一个变量,其范围是您绑定到文档就绪处理程序的函数的本地。因此,只要该函数退出,codeAddress就不再存在。第二个声明(注意缺少“var”)将codeAddress声明为全局变量,因此在ready函数退出后它仍然可以访问。

答案 1 :(得分:2)

您应该在您的document.ready方法中为所需元素指定一个点击处理程序,而不是使用onclick。

E.g。

$(input).click(function() { codeAddress() });

将代码地址函数分配给所有输入框的click事件,显然你想在特定的类或ID中定位它

这是最佳做法,而不是使用onclick。

答案 2 :(得分:2)

单击该按钮时,会在全局范围内查找codeAddress(),但您已在$(document).ready()中对其进行了定义。

$(document).ready()之外声明函数可能是最好的,只有在ready处理程序中调用的函数才应该在里面定义;这样做也可以让您的准备好处理程序更清洁。

要在标记被拖过某个位置时找到位置,您需要使用GeoCoder服务器将其映射到文本位置:

var geocoder = new google.maps.Geocoder();

google.maps.event.addListener(marker, 'dragend', function(evt) {
    geocoder.geocode({latLng: evt.latLng}, function(results, status) {
        if (status==google.maps.GeocoderStatus.OK && results.length) {
            // do something with results[0..x].formatted_address
        }
    })
});