Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery/dirty forms/window.onbeforeunload仅在链接选择后触发_Javascript_Jquery_Asp.net Mvc_Onbeforeunload - Fatal编程技术网

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;
      } });