【问题标题】:In Rails, onbeforeunload not working consistently for Chrome browser在 Rails 中,onbeforeunload 在 Chrome 浏览器中无法正常工作
【发布时间】:2016-07-24 11:40:35
【问题描述】:

我试图让onbeforeunload 在我的页面上始终如一地工作,该页面有一个用户正在填写的表单。我期待以下内容:

  • 当我点击另一个页面的链接时,它会提示用户
  • 当我刷新页面时,它会提示用户

我目前正在 Google Chrome 下进行测试,我现在正在使用以下内容 - 尽管我尝试了一些变体。

<script>

  $(document).on('ready page:load', function () {
    $(window).on('beforeunload', function() {
      return "You should keep this page open.";
    });
  });

</script>

我有时会出现提示,但并非始终如一。我认为这可能与上面的代码和turbolinks 有冲突。但一直未能找到获得上述预期结果的解决方案。

--- 更新:

这是我最终使用的代码。

<script data-turbolinks-eval="false">

$(document).ready(function() {
  form_modified=0;

  $('#report-form *').change(function(){
     form_modified=1;
  });

  $("#report-form input[name='commit']").click(function() {
      form_modified = 0;
  });
});

$(document).on('page:before-change', function() {

  if ($("#report-form").length > 0) {
    if (form_modified==1) {
      if (confirm("There are unsaved changes, click \"Cancel\" to remain on the page.")) {
        // clicks "OK", nothing here means
      } else {
        // clicks "Cancel"
        event.preventDefault();
      }
    }
  }
});

</script>

此方法不适用于页面刷新或通过窗口“X”退出但是...

【问题讨论】:

    标签: javascript jquery ruby-on-rails google-chrome turbolinks


    【解决方案1】:

    Turbolinks 为此类场景提供 page:before-change 事件。

    但是我不确定你为什么将你的第二个处理程序in绑定到你的第一个处理程序中。当您单击 Turbolinks 链接时,window 对象不会更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2021-03-10
      • 2012-05-30
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多