Javascript JQuery/dirty forms/window.onbeforeunload仅在链接选择后触发
我试图为用户实现一个警告,以防他们未保存就离开表单 警告对话框按预期工作,但唯一的例外是,当用户选择“停留在页面上”时,所选侧菜单项更改为用户单击的菜单项(表单相同) 如何确保用户选择“停留在页面上”后仍选择相同的菜单项?Javascript JQuery/dirty forms/window.onbeforeunload仅在链接选择后触发,javascript,jquery,asp.net-mvc,onbeforeunload,Javascript,Jquery,Asp.net Mvc,Onbeforeunload,我试图为用户实现一个警告,以防他们未保存就离开表单 警告对话框按预期工作,但唯一的例外是,当用户选择“停留在页面上”时,所选侧菜单项更改为用户单击的菜单项(表单相同) 如何确保用户选择“停留在页面上”后仍选择相同的菜单项? var warnMessage = "Unsaved changes. Do you really want to leave the page?"; $(document).ready(function () { $('a.k-link').on('click', f
var warnMessage = "Unsaved changes. Do you really want to leave the page?";
$(document).ready(function () {
$('a.k-link').on('click', function () {
window.onbeforeunload = function () {
if (isDirty) return warnMessage;
}
});
});
您可能会发现使用确认提示(请记住,这是一个阻塞对话框)更容易(并且可能在浏览器之间更一致)
var warnMessage=“未保存的更改。是否确实要离开页面?”;
$('a.k-link')。在('click',函数(e){
如果(isDirty&!confirm(warnMessage)){
e、 预防默认值();
}
});
至少有两个原因可以避免在卸载之前打开:
- 该规范不需要浏览器来显示您需要的消息
提供,以及
- 正确的事件实际上是
您可以而且应该通过window.addEventListener()和beforeunload事件处理此事件。这里有更多的文档
我只是猜测,因为剑道UI脚本读起来并不有趣,但是“selected”类被应用,因为导航事件已经启动,即使你取消了它;剑道脚本可能只是在监听成功的点击onbeforeunload
和beforeunload
都发生在click事件解决后(无论如何,是AFAIK)。以下内容对我有效(添加e.stopPropagation):
或者返回false:
$('a.k-link').on('click', function (e) {
if (isDirty && !confirm(warnMessage)) {
return false;
} });
你选择的课程让我觉得这是剑道/电传菜单。“对吗?你能贴把小提琴吗?”铁山。是的,没错。@user797717哪个版本?谢谢!上面的代码基本上是相同的(选定的类仍然适用),但您的解释帮助我找到了问题的解决方案。方法stopPropagation&preventDefault合在一起或只返回false就成功了。别忘了你可以接受自己的答案;虽然不需要接受答案,但这是一个快速的视觉指示器,表明您的问题有一个令人满意的解决方案。你还可以多赚几分。
$('a.k-link').on('click', function (e) {
if (isDirty && !confirm(warnMessage)) {
e.preventDefault();
e.stopPropagation();
} });
$('a.k-link').on('click', function (e) {
if (isDirty && !confirm(warnMessage)) {
return false;
} });