0

現在、送信ボタンを押すと、ドロップダウンリストボックスにある値に従ってマーカーをマップに配置する必要があるコードがいくつかあります。ドロップダウンボックスの値がPHPコードのGETフォームメソッドを介してURLに入力され、パラメーターを介してjavascript関数に値が渡されるようにしました。

私が抱えている問題は、マーカーが地図に表示されるように、送信ボタンを2回押す必要があることです。これは理想的とは言えません。私はこの問題を解決するための助けを探しています。ありがとう。

これはjavascript関数コードです:

function placeMarker(address) 
        {       
            // ... Set up map code here

            var map = new google.maps.Map(document.getElementById("universityMap"), myOptions);

            <?php
                $uniname = $_GET['uninames'];       

                //Get the Uni code according to the uni name
                $queryUniID = $mysqli->prepare("SELECT IdCode FROM universityid WHERE UniName = ?");
                $queryUniID->bind_param('s', $uniname);
                $queryUniID->execute();
                $queryUniID->bind_result($unicode);
                $queryUniID->fetch();
                $queryUniID->close();

                //Load the question data into relevant variables
                $queryQuestions = $mysqli->prepare("SELECT QuestionNo, Answered1, Answered2, Answered3, Answered4, Answered5 FROM nssdata WHERE UniID = ?");
            ?>

            address = address + ", UK";
            geocoder.geocode({'address': address}, function(results, status) 
            {
                if (status == google.maps.GeocoderStatus.OK) 
                {
                    marker = new google.maps.Marker(
                    {
                        map: map,
                        position: results[0].geometry.location,
                        title: address, 
                        draggable: false
                    });
                }
                else 
                {
                    alert(status);
                }
            });
        }

これは私のhtmlフォームです:

        <form action="#" onsubmit="placeMarker(this.uninames.value)" method="get">
4

1 に答える 1

1

値がすべて適切な範囲内にある場合、これは実際に機能するはずです。これの縮小版をテストする際に、アドレスを入力し、[送信]をクリックすると、マーカーが本来あるべき場所に表示されます。

結果が表示される前に2回クリックしている理由について、いくつかの理論があります。

(1)ルックアップレイテンシ:ジオコーダーの状態を追跡し、実行するための十分な時間を確保してください。

(2)グリッチ:一部のマップレンダラーでは、マーカーのマップを循環させる必要がある場合があります。たとえば、この一連の連続した呼び出し:marker.setMap( null ); marker.setMap( map );マーカーを非表示/表示し、場合によってはディスプレイのグリッチを解除します。

(3)送信の中断:インターフェースがあなたが述べたよりも複雑で、干渉している可能性がある場合は、フォームの送信(#)を送信しないようにする必要があります。つまり、JavaScript / ajaxに機能させるには、[送信]をクリックした後にブラウザが#アドレスに移動するのを停止する必要があります。

これがフォームの縮小版です。return(false)の部分に注意してください-ブラウザアドレスが#に変更されるのを防ぎます。

<form action="#" onsubmit="placeMarker('adr');return( false );" method="get">
    <input type="text" id="id_address" />
    <input type="submit" />
</form>

このアドレスをテキストに簡略化したことに注意してください。実際のテストでは、次のようにデータを送信しました。

placeMarker(document.getElementById('id_address').value);

于 2012-04-05T13:15:44.033 に答える