0

我有一个 Facelet 页面,其中包含一个表单,beforeunload当它包含未保存的数据时应该显示一条消息。为此,我使用以下 JavaScript:

$(window).on('beforeunload', function(){
    var val = document.getElementById("saveFormId:newInputId").value;
    var flagVal = (val=='true');
    if(flagVal)
        return 'Are you sure you want to leave?';
});

在同一页面中,我有另一种更改语言环境的表单:

<h:form id="localeForm">
    <p:selectOneButton value="#{localeBean.selectedLocale}"
        valueChangeListener="#{localeBean.countryLocaleCodeChanged}"
        onchange="submit()" style="height:1px;margin-top:7px;"
        styleClass="ui-language-button">
        <f:selectItems value="#{localeBean.languages}" />
    </p:selectOneButton>
</h:form>

但是,这也会触发beforeunload处理程序。我想忽略beforeunload处理程序中上述表单的提交。我怎样才能做到这一点?

4

1 回答 1

0

onchange="submit()"将提交整个页面,触发onbeforeunload事件。您应该使用 ajax 来执行操作:

<p:selectOneButton value="#{localeBean.selectedLocale}" style="height:1px;margin-top:7px;"        styleClass="ui-language-button">
    <f:selectItems value="#{localeBean.languages}" />
    <p:ajax event="change" listener="#{localeBean.countryLocaleCodeChanged}" />  
</p:selectOneButton>

根据您当前的实现,您可能需要更改您countryLocaleCodeChanged以接受 0 个参数或AjaxBehaviorEvent

于 2013-08-15T06:26:46.077 回答