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