更改某些表单值后,阻止从页面导航

时间:2014-07-03 09:33:40

标签: jquery onbeforeunload

我希望在更改某些值时向我的表单添加确认消息。我发现这段代码效果很好:

<script>
var warnMessage = "You have unsaved changes on this page!";

$(document).ready(function() {
  $('input,textarea').on('input', function() {
    window.onbeforeunload = function () {
      if (warnMessage != null) return warnMessage;
    }
  });

  $('input:not(:button,:submit),select').change(function () {
    window.onbeforeunload = function () {
      if (warnMessage != null) return warnMessage;
    }
  });

  $('input:submit').click(function(e) {
    warnMessage = null;
  });
});
</script>

我的问题是,即使用户更改为原始值,此代码也会触发确认消息。 对于textarea和文本输入我发现我可以做:

var originalValue = this.defaultValue;
var currentValue = $(this).val();
if (originalValue != currentValue) {
    :
    :
}

但是对于单选按钮,复选框并选择它会变得更复杂。

我在加载页面后开始做一些映射所有单选按钮和复选框的工作:

var radioAndCheckboxDefaultValues = new Object();
function mapDefaultValues() {
  $('input:checked').each(function() {
    var name = $(this).attr('name');
    var val = $(this).val();
    radioAndCheckboxDefaultValues[name] = val;
  });
}

$(document).ready(function() {
  mapDefaultValues();
});

问题是它没有映射未经检查的元素,但我仍然没有解决映射选择元素。

我希望脚本是通用的,所以我可以简单地将它附加到我拥有的所有表单上。

我确信这已经完成,但是找不到它......谢谢!

0 个答案:

没有答案