Javascript 在卸载前缩小范围,仅在字段更改或更新时开火

Javascript 在卸载前缩小范围,仅在字段更改或更新时开火,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我正在试图找出如何限制表单上的beforeunload命令。我已经能够弄清楚如何解除beforeunload命令的绑定,以及何时离开这个表单。但是,无论表单是否更改,每次都会发生卸载。我正在试图弄清楚如何使beforeunload仅在表单实际更新或更改时启动。如果用户单击浏览器上的后退按钮,则不会触发beforeunload。这太完美了。但是,如果用户单击“表单”上的链接,则会弹出beforeunload提示。这是设计的吗?也许我应该换一种方式来处理这个问题?我是新手,所以我愿意接受建议 我已经

我正在试图找出如何限制表单上的beforeunload命令。我已经能够弄清楚如何解除beforeunload命令的绑定,以及何时离开这个表单。但是,无论表单是否更改,每次都会发生卸载。我正在试图弄清楚如何使beforeunload仅在表单实际更新或更改时启动。如果用户单击浏览器上的后退按钮,则不会触发beforeunload。这太完美了。但是,如果用户单击“表单”上的链接,则会弹出beforeunload提示。这是设计的吗?也许我应该换一种方式来处理这个问题?我是新手,所以我愿意接受建议

我已经阅读了MDN链接,在卸载之前解释了。。。 而且似乎不知道如何将beforeunload缩小到仅当表单上的字段已更改时

   $('form').submit(function() {
   $(window).unbind('beforeunload');
    });
   $(window).on('beforeunload',function(){
   return '';
    });
我试图找出如何修改上面的代码,以便只有当用户离开此页面时,表单上的某个字段发生更改时,才会触发beforeunload。如果有一个弹出窗口询问用户是否希望在没有单击或更改任何内容的情况下离开页面,这会让用户感到困惑

类似这样的。 我们签出简单表单,并且只有在有值时才提示用户

在提交时添加了变量集,这允许我们绕过onunload测试

var提交=false;
addEventListener(“beforeunload”,函数(事件){
console.log(“检查表单”);
让inputValue=document.querySelector('#myInput').value;
if(inputValue.length>0&&submitting==false){
console.log(输入值);
event.returnValue='您确定要离开吗?';
}
event.preventDefault();
});
document.addEventListener(“提交”,函数(事件){
提交=真;
});

类似这样的东西。 我们签出简单表单,并且只有在有值时才提示用户

在提交时添加了变量集,这允许我们绕过onunload测试

var提交=false;
addEventListener(“beforeunload”,函数(事件){
console.log(“检查表单”);
让inputValue=document.querySelector('#myInput').value;
if(inputValue.length>0&&submitting==false){
console.log(输入值);
event.returnValue='您确定要离开吗?';
}
event.preventDefault();
});
document.addEventListener(“提交”,函数(事件){
提交=真;
});


愚蠢的问题Steve,但只需在卸载前的
中测试表单状态是否发生更改,并且仅在消息发生更改时显示消息。无需删除事件?愚蠢的问题Steve,但只需在卸载前的
中测试表单状态是否发生更改,并仅在消息发生更改时显示消息。不需要删除该事件?如何让Submit绕过此代码?我整个下午都在玩它,当用户单击submit并且所有字段实际上都已填充时,我无法让它绕过此代码。我可以在表单submit上删除Event listener吗$('form').submit(函数(){window.removeEventListener(“beforeunload”,);});我试过了,但可能我的语法不正确。Steve,我想如果用户已经完成了字段,你应该警告用户,对吗?你不能“绕过”代码本身。您只需控制测试,仅在用户输入值时向其发出警告。我做了
if(inputValue.length>0)
您需要进行更多的测试,以检查所有控件。有意义吗?如果用户有不完整的字段,我想警告他们…如果他们试图离开页面,如果他们已经开始填充页面,我想警告他们…如何让Submit绕过此代码?我整个下午都在玩它,当用户单击submit并且所有字段实际上都已填充时,我无法让它绕过此代码。我可以在表单submit上删除Event listener吗$('form').submit(函数(){window.removeEventListener(“beforeunload”,);});我试过了,但可能我的语法不正确。Steve,我想如果用户已经完成了字段,你应该警告用户,对吗?你不能“绕过”代码本身。您只需控制测试,仅在用户输入值时向其发出警告。我做了
if(inputValue.length>0)
您需要进行更多的测试,以检查所有控件。有意义吗?如果用户有不完整的字段,我想警告他们…如果他们试图离开页面,如果他们已经开始填充页面,我想警告他们。。。