0

次のコードを使用すると、ステータスERRORが警告されます。commandButtonフォームの外側に置くか、ステータスalert()の最後に別のものを置くと、アラートが表示されます。 そこで何が起こるの?geocode()OK

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>

    <script src="https://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>

    <script>
    var geocoder;
    geocoder = new google.maps.Geocoder();

    function geocode() {
        geocoder.geocode({'address' : 'china'},geocoderCallback);
    }

    function geocoderCallback(results, status) {
        alert(status);
        };
    </script>

</h:head>

<h:body>

    <h:form>
    <h:commandButton onclick="geocode()" value="geocode" />
    </h:form>

</h:body>
</html>
4

1 に答える 1

2

まず、コードを次から変更します

onclick="geocode()"

の中へ

onclick="geocode(); return false;"

その動作の理由は、 が の<h:commandButton内部にある場合h:form(および を使用していない場合) 、ページ全体の送信f:ajaxを行っているためです。

そのページ全体の送信の結果として、ページのリロードが発生し (そしてそれがマップを混乱させます)、その後リロード後にコールバック('geocoderCallback') が呼び出されています

<h:commandButton外側に移動するh:formと、ページの送信は行われず、js コードのみが呼び出されます。この場合、すべて問題ありません (マップは「めちゃくちゃ」ではありません)。

「 geocode() の最後にある別のアラート()」についても同じことが言えます。ページが送信される前に (マップが「めちゃくちゃ」になる前に) アラートが表示されます。

于 2013-07-16T10:12:06.583 に答える