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 代码,在这种情况下一切正常(您的地图没有“混乱”)

“地理编码()末尾的另一个警报()”也是如此,它将在页面提交之前显示警报(在您的地图“混乱”之前)

于 2013-07-16T10:12:06.583 回答