0

以下を使用して、配達郵便番号の緯度と経度を更新します。

スクリプトが呼び出されたときに入力ボックスから郵便番号を削除することを除いて、コードは完全に機能します。

誰かがこれがなぜであるか教えてもらえますか?

<script type="text/javascript">
//<![CDATA[
  var geo = new GClientGeocoder(); 
  function getAddress(search) {
    geo.getLocations(search, function (result)
      { 
        if (result.Status.code == G_GEO_SUCCESS) {
          var p = result.Placemark[0].Point.coordinates;
          var lat=p[1];
          var lng=p[0];
          var dcMessage = '<span style="color:#990000">Post Code Successfully GeoCoded</span>'
          var dcHiddenOutput = '<input type="hidden" name="lat" value="' +lat+ '"><input type="hidden" name="lng" value="' +lng+ '">';
          document.getElementById("ConfirmOrder").innerHTML += dcMessage;
          document.getElementById("UpdateGeo").innerHTML += dcHiddenOutput;
        } 
      }
    );
  }
  function theNext() {
    var addresses = document.getElementById("myInput").value;
      getAddress(addresses);
  }
//]]>
</script>

<form id="UpdateGeo" method="get" action="updateGeocode.asp">
<input id="myInput" name="PostCode" style="text-transform:uppercase" />&nbsp;
<input type="checkbox"  onClick="theNext()">&nbsp;
<input type="submit" value="Update Database">
</form>
4

1 に答える 1

1

これは、UpdateGeoのinnerHTMLの変更が原因です。「innerHTML+=」ステートメントを使用すると、現在の内部コントロールの状態が失われ、元の状態に戻ります(たとえば、htmlで静的に宣言された状態に戻ります)。

動的に作成された要素は、文字列ではなく、control.appendChild()を使用して次のように追加する必要があります。

var container = document.getElementById('UpdateGeo');
var element = document.createElement('input');
element.setAttribute('type','hidden');
element.setAttribute('name','lat');
element.value = lat;
container.appendChild(element);

element = document.createElement('input');
element.setAttribute('type','hidden');
element.setAttribute('name','lng');
element.value = lng;
container.appendChild(element);

それ以外の

var dcHiddenOutput = '<input type="hidden" name="lat" value="' +lat+ '"><input type="hidden" name="lng" value="' +lng+ '">';
document.getElementById("UpdateGeo").innerHTML += dcHiddenOutput;    
于 2012-11-22T11:44:41.930 に答える