簡體   English   中英

在另一個內部使用變量

[英]Using a variable inside another

我正在嘗試通過PHP將值傳遞給Javascript函數,但是它不起作用,該值似乎沒有通過。 當我用靜態文本替換變量時,它可以正常工作。

我正在通過這樣的PHP文件調用該函數。

<?php
if (!empty($data['geocode'])) {
    echo '<body onload="initializeGM(\'' . $data['geocode'] . '\');">';
} else {
    echo '<body>';
}
?>

$data['geocode']包含latlng作為字符串。

這是Javascript代碼。

function initializeGM(geocode) {
  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(geocode),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

我已經在JS函數中添加了一個alert(geocode)進行測試,並且工作正常。

如何做到這一點,以便可以將geocode變量傳入並起作用?

假設我已經正確理解了您的問題,則geocode是一個PHP變量,您希望將其傳遞給JavaScript函數調用。 在這種情況下,您需要echo顯PHP變量的值:

new google.maps.LatLng(<?php echo($geocode); ?>);

但是 ,請注意, LatLng構造函數需要2個類型為Number的參數(和一個可選的布爾參數),並且您僅嘗試傳遞一個參數。 盡管我可能完全誤解了您的意圖。

編輯 (請參閱評論)

我沒有注意到您將geocode作為參數傳遞給initializeGM函數。 如果您實際上試圖將PHP變量傳遞給該函數,則需要修改對JavaScript函數的調用以使用PHP變量:

initializeGM(<?php echo($geocode); ?>);

上面的“然而”段落仍然適用。 您的代碼很可能會引發錯誤,因為LatLng構造函數中undefined lng

再次修改 (請參見修改后的問題)

乍一看,您所看到的將導致沿這些方向的變化(正如您所說的geocode包含一個字符串):

<body onload="initializeGM('somelat,somelng');">

從理論上講,這沒有錯(將一個字符串傳遞給initializeGM ),但是問題在於該函數需要兩個Number類型的參數,而不是String類型的一個參數:

<body onload="initializeGM(100, 200);"> <!--Use real lat-lng values here!-->

這將需要更改JavaScript函數:

function initializeGM(lat, lng) { //2 arguments
    var myOptions = {
        zoom: 8,
        center: new google.maps.LatLng(lat, lng), //Pass 2 arguments to constructor
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

google.maps.LatLng構造函數至少接受兩個參數lat:numberlng:number 您只通過了一個。

假設$data['geocode']看起來像1.234,5.678 ,嘗試這個...

  1. 將您的JS函數更改為

     function initializeGM(lat, lng) { var myOptions = { zoom: 8, center: new google.maps.LatLng(lat, lng), mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); } 
  2. 更改為

     <?php if (!empty($data['geocode'])) : $coords = explode(',', $data['geocode']); ?> <body onload="initializeGM(<?php printf('%.15f, %.15f', $coords[0], $coords[1]) ?>)"> <?php else : ?> <body> <?php endif ?> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM