我有一个小的谷歌地图脚本来获取位置,来自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再次感谢大家。
答案 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
}
})
});