我希望在更改某些值时向我的表单添加确认消息。我发现这段代码效果很好:
<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();
});
问题是它没有映射未经检查的元素,但我仍然没有解决映射选择元素。
我希望脚本是通用的,所以我可以简单地将它附加到我拥有的所有表单上。
我确信这已经完成,但是找不到它......谢谢!