一部のコードが処理された後、グローバル変数に値を与えようとしています。計画どおりに機能していません。
私がやっていることは、2 つのテキストボックスに住所と都市を入力することです。最後の関数に入り、アドレスの座標を取得する codeAddress を呼び出します。
そこから座標を setLatLng に送信すると、正常に動作します。しかし、getLatLng を使用して longlats を呼び出して設定値を確認することはできません。
住所と都市を 2 回追加した場合にのみ、値が表示されます。longlats の初期化が遅すぎて、正しい値が間に合わないと考えています。
何かアドバイス?
関連するコードは以下です。
<script>
var longlats ="";
function setLatLng(x,y){
longlats = x+","+y;
alert(longlats) //shows value
}
function getLatLng(){
alert(longlats);
return longlats;
//calling this gives undefined
}
function codeAddress() {
$('#map').show();
var geocoder = new google.maps.Geocoder();
var address = document.getElementById("address").value +"," + document.getElementById("city").value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
locationsall[counter] = new Array();
locationsall[counter][0] = address;
locationsall[counter][1] = lat; //has value
locationsall[counter][2] = lng; //has value
setLatLng(locationsall[counter][1],locationsall[counter][2]);
counter++;
}
$(function() {
$("#locationadd").click(function() {
codeAddress();
var get = getLatLng();//value is undefined..
//i want to do stuff with the values in longlats
}
)};
</script>
編集1
$("#locationadd").click(function() {
var address = $("#address").val();
var city = $("#city").val();
if (address =="" || city =="") {
$("#locationtext").text('*Please enter an address and city');
return false;
}
else {
codeAddress(function(){
var get = getLatLng();
var longlat = get.split(",");
var lat = longlat[0];
var lng = longlat[1];
var $tr2 = $('<tr>').css({
'padding': '4px',
'background-color': '#ddd'
}).appendTo('#locationDeals');
var location = [
address,
city
];
locations.push(location);
for (i = 0; i < 2; i++) {
var $td2 = $('<td>').appendTo($tr2);
$('<span>').text(location[i]).appendTo($td2);
$('<input type="hidden">').attr({
'name': 'loc[' + ctr + '][' + i + ']',
'value': location[i]
}).appendTo($td2);
}
var $tdRemoveRow2 = $('<td>').appendTo($tr2);
$('<a>').attr({
'href': '#',
'id': 'submit-button'
}).text("Remove").click(function() {
var index2 = $tr2.index();
$("#locationDeals input[type='hidden']").each(function() {
this.name = this.name.replace(/\[(\d+)\]/, function(str2, number2) {
return "[" + (+number2 > index2 - 1 ? number2 - 1 : number2) + "]";
});
});
$tr2.remove();
var tmp = locations.splice(locations.indexOf(location), 1);
deleteMarker(tmp);
return false;
}).appendTo($tdRemoveRow2);
ctr++;
document.getElementById("address").value = "";
document.getElementById("city").value = "";
document.getElementById("address").focus();
$("#locationtext").text('');
return false;
});
}
});