gpt4 book ai didi

jquery - onbeforeunload - 绑定(bind)到选择性事件

转载 作者:行者123 更新时间:2023-12-03 23:03:56 25 4
gpt4 key购买 nike

我正在开发一个企业应用程序,其中表单是动态生成的,我们无法控制代码。表单中的大多数控件都具有与其关联的以下代码

<select name="s_10_1_1_0"  onchange = 'SWESubmitForm(document.SWEForm10_0,s_5,"","1-E0RHB7")' id='s_10_1_1_0' tabindex=1997 >

<input type="text" name='s_10_1_11_0' value='' onchange = 'SWESubmitForm(document.SWEForm10_0,s_7,"","1-E0RHB7")' id='s_10_1_11_0' tabindex=1997 maxlength="30">

当用户尝试使用页眉或页脚中的链接导航到其他页面时,我们希望显示一个确定取消对话框。

我习惯于按照以下代码绑定(bind) onbeforeunload 事件并向用户呈现一个确定取消对话框。

//this identifies the unique page name
var viewName = $('input[name="SWEView"]').val();
// if I am on desired page bind the event so that now dialog is presented to user
if(viewName == "XRX eCustomer Create Service Request View"){
$(window).bind('beforeunload', function(){
return 'Your Inquiry has not been submitted yet.';
});
}

但问题是,每次用户更改表单中任何字段的值时,都会出现此对话框(我相信这是由于 onchange 事件中存在 SWESubmitForm 代码所致)。

如果用户单击表单之外的任何其他链接,或者换句话说,将 onbeforeunload 与页面上的选择性事件(包括关闭窗口)联系起来,我希望出现 onbeforeunload 对话框。

请帮忙

最佳答案

.onbeforeunload() 是全局的。您不能仅针对某些离开页面的方式触发它。如果安装了事件处理程序,无论查看者如何离开页面,它都会触发。

您可以跟踪自己的内部状态,并决定是在 onbeforeunload() 处理程序中提示任何内容,还是不返回任何内容(因此不进行提示)。

所以,你可以有这样的代码:

//this identifies the unique page name
var viewName = $('input[name="SWEView"]').val();
// if I am on desired page bind the event so that now dialog is presented to user
if(viewName == "XRX eCustomer Create Service Request View"){
$(window).bind('beforeunload', function() {
// figure out whether you need to prompt or not
if (myStateSaysToPrompt) {
return 'Your Inquiry has not been submitted yet.';
} else {
return; // no prompt
}
});
}

更新

由于这对于谷歌获得很多浏览量来说相当高,因此值得注意的是,这个答案不再有效。

 $(window).bind('beforeunload', function() {

请注意,所绑定(bind)的事件中不再有“on”。在更高版本的 jQuery 中使用之前的 onbeforeunload 将导致什么也不会发生。

关于jquery - onbeforeunload - 绑定(bind)到选择性事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com