与选择性事件结合



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

<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">

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

我已经习惯了以下代码来绑定onbeforenload事件并向用户显示ok取消对话框。

//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代码)。

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

请帮助

.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() {

请注意,要绑定的事件中不再有"on"。在jQuery的后续版本中使用以前的onbeforeunload将不会产生任何结果。

相关内容

  • 没有找到相关文章

最新更新