我正在监视表单输入元素以进行更改(在页面退出时提醒用户未保存的表单更改)。
据我了解,只有在某些输入元素失去焦点(例如,文本框)时才会触发jQuery更改事件。
这是有问题的,因为用户可以编辑单个文本框,然后尝试退出,并且不会触发文本框更改事件。
这是我走了多远:
var formChanges = {
override: false,
changed: false,
checkChanges: function() {
if(!formChanges.override) {
if(formChanges.changed) {
return "There are currently unsaved changes.";
}
}
},
init: $(document).ready(function() {
$('#checkThis').submit(function() { //'checkThis' is the form ID
formChanges.override = true;
});
$(':input').change(function() {
formChanges.changed = true;
});
})
}
window.onbeforeunload = formChanges.checkChanges;
关于如何克服这个问题的任何想法?
答案 0 :(得分:3)
实际上对于你正在做的事情,我认为你最好使用按键或键盘输入和改变选择和收音机这样
$('input:text, textarea').keypress(function() {
formChanges.changed = true;
});
$('select, input:radio, input:checkbox').change(function(){
formChanges.changed = true;
});
答案 1 :(得分:2)
这看起来效果很好:
var oldForm = null;
function monitorChanges(form) {
if(oldForm == null) {
oldForm = ($(form).serialize());
} else {
alert(oldForm == $(form).serialize());
}
}
答案 2 :(得分:0)
编辑:像Nicola说的那样,为了确保它是否有所改变,你可能需要与原始值进行比较。