忽略在beforeunload中提交某个表单

时间:2013-08-14 10:40:29

标签: javascript jsf submit onbeforeunload

我有一个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处理程序中提交上述表单。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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的实例