有没有办法在单击对象之前将window.onbeforeunload设置为null



我正在使用wtforms,这是我的提交按钮:

{{ form.submit(class="btn btn-outline-info") }}

这是我的onbeforeunload函数:

<script type="text/javascript">
window.onbeforeunload = function() {
return "Are you sure you want to navigate away?";
}
</script>

我知道在普通的html表单中,我可能可以使用jquery来实现这一点:

参考:

表单提交前的jquery函数stackoverflow讨论

卸载前清空堆叠器流量讨论

<head>
<script src="jquery-3.5.1.min.js"></script>
</head>
<script>
$('#myform').submit(function(event) {
event.preventDefault(); //this will prevent the default submit
window.onbeforeunload = null;

$(this).unbind('submit').submit(); // continue the submit unbind preventDefault
})
<script>

当我使用这些wtforms对象时,我应该怎么做?(附言:我不熟悉js或jquery……请指出我做错了什么……(

提前感谢!

一个选项是使用addEventListener而不是onbeforeunload

const myFunc = function() {
return "Are you sure you want to navigate away?";
}
window.addEventListener('beforeunload', myFunc);

然后在submit方法上,删除侦听器

window.removeEventListener('beforeunload', myFunc);

所以这可能不是最好的方法!但这是一个非常好的工作!由于wtforms对象不允许将任何额外的函数,即onclick或任何信息传递到{}花括号中,因此解决方法是将其包装!所以添加所有这些东西的主要方法是调用一个函数来禁用onbeforeunload,因此一个快速的解决方案就是

onbeforeunload函数(保持不变(:

<script type="text/javascript">
window.onbeforeunload = function() {
return "Are you sure you want to navigate away?";
}
</script>

禁用onbeforeunload功能:

<script>
function submit()
{
window.onbeforeunload = null;
}
</script>

对于提交按钮:

<a onclick="submit()">{{ form.submit(class="btn btn-outline-info") }}</a>

无法想象我花了这么长时间才弄明白,顺便说一句,谢谢@terrymorse,他让我明白了这个问题到底有多容易!感谢所有评论并提供解决方案和编辑我的问题的人!

最新更新