我有一个页面,用户可以将其地址输入“zipcode”字段 . 我还有一个“检测位置”按钮,用于对用户地址进行地理定位 . 当他们点击此按钮时,他们的城市名称和邮政编码将回显到'zipcode'字段,纬度和经度将传递给两个动态创建的隐藏输入字段 . 我还在页面上有Places API .
回显地址和邮政编码并创建隐藏字段的代码如下:
if (results[1]) {
split1 = results[1].formatted_address.split(', ');
// echo the geolocation address into the 'zipcode' input field
document.getElementById('zipcode').value = split1[1] + ', ' + split1[2]; // city name and postcode
// if hidden lat and lng fields are present from Places API, remove them
$(".storelocator_body form").find("input.geomtery").remove();
// produce new hidden fields with the new lat and lng values
$(".storelocator_body form").append("<input type='hidden' class='geomtery' name='lat' value='" + lat + "'>");
$(".storelocator_body form").append("<input type='hidden' class='geomtery' name='lng' value='" + lng + "'>");
} else {
alert("No results found");
}
我遇到的问题是,有时候,地理定位会产生虚假的结果,特别是如果我在没有无线网卡的桌面上搜索的话 . 当我手动将'zipcode'输入字段更改为正确的地址时,隐藏的'lat'和'lng'字段未被删除,因此我的脚本仍在搜索不正确地理位置的lat和lng结果 .
我想出的解决方案如下:
if(document.getElementsByClassName("geomtery")){
$("#zipcode").on("input",function(e){
$(".storelocator_body form").find("input.geomtery").remove();
});
}
我的想法是,如果用户开始在“zipcode”输入字段中键入或甚至粘贴新地址,并且已经存在隐藏的“lat”和“lng”字段,则会删除这些字段 .
你怎么看?我是否以最好的方式完成了这项工作?我是编码的新手,并且会喜欢一些反馈 . 非常感谢 .
1 回答
为什么让自己变得困难?您不必每次都进行DOM插入,而只需检测字段是否存在(甚至更好,直接将它们包含在HTML中),并更改其值 .
一些技巧:
在单引号(
"
)和双引号('
)之间选择并保持一致 .就个人而言,我总是使用
"
代表HTML,'
代表JS .据我所知,jQuery中没有
input
事件,请使用change
或keyup
或形式submit
.您在函数中发送了
e
(event)作为参数:您应该只包含您需要的参数(在本例中为none),否则可能会使读取您代码的其他人感到困惑 .一致的编码风格:如果你选择使用jQuery,那么使用像
document.getElementsByClassName
这样的原生JS函数是没有意义的,因为它没有't work in IE8- and jQuery'更简单的类选择器$('.class')
,相比之下 .geomtery
是几何的拼写错误?