jQuery更改事件(监视表单更新)
我正在监视表单输入元素的更改(在页面退出时提醒用户未保存的表单更改) 我的理解是,只有在某些输入元素失去焦点(例如,文本框)时才会触发jQuery更改事件 但这是有问题的,因为用户可以编辑单个文本框,然后尝试退出,文本框更改事件不会触发 以下是我取得的成绩:jQuery更改事件(监视表单更新),jquery,forms,events,Jquery,Forms,Events,我正在监视表单输入元素的更改(在页面退出时提醒用户未保存的表单更改) 我的理解是,只有在某些输入元素失去焦点(例如,文本框)时才会触发jQuery更改事件 但这是有问题的,因为用户可以编辑单个文本框,然后尝试退出,文本框更改事件不会触发 以下是我取得的成绩: var formChanges = { override: false, changed: false, checkChanges: function() { if(!formChanges.over
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;
关于如何克服这个问题,你有什么想法吗?实际上,对于你正在做的事情,我认为你最好使用按键或键控输入,并像这样更改select和radio
$('input:text, textarea').keypress(function() {
formChanges.changed = true;
});
$('select, input:radio, input:checkbox').change(function(){
formChanges.changed = true;
});
实际上,对于您正在做的事情,我认为您最好使用按键或键控输入,并更改select和radio,就像这样
$('input:text, textarea').keypress(function() {
formChanges.changed = true;
});
$('select, input:radio, input:checkbox').change(function(){
formChanges.changed = true;
});
当在checkChanges之前卸载时,“hack”将重点放在一个不相关的元素上。按键并不意味着改变
编辑:正如Nicola所说,为了绝对确定它是否被更改,您可能需要将其与原始值进行比较。在checkChanges之前卸载时,“hack”将集中在一个不相关的元素上。按键并不意味着改变
编辑:正如Nicola所说,为了绝对确定它是否被更改,您可能需要与原始值进行比较。这似乎很有效:
var oldForm = null;
function monitorChanges(form) {
if(oldForm == null) {
oldForm = ($(form).serialize());
} else {
alert(oldForm == $(form).serialize());
}
}
这似乎很有效:
var oldForm = null;
function monitorChanges(form) {
if(oldForm == null) {
oldForm = ($(form).serialize());
} else {
alert(oldForm == $(form).serialize());
}
}
我不认为每按一次键都意味着文本(箭头键)的改变。当然,知道是否发生了变化比我做的要复杂得多(你应该对照原始值检查实际值,添加一个字母并删除它不会改变输入)。我的回答只是关于选择正确的事件,我认为你应该使用按键,而不是更改文本输入。我不认为每个按键都意味着文本(箭头键)的更改。当然,知道是否发生了更改比我做的要复杂得多(实际上,你应该对照原始值检查实际值,添加字母和删除字母不会改变输入)。我的答案只是选择正确的事件,我认为你应该使用按键,而不是更改文本输入。这非常聪明。谢谢你的想法!这非常聪明。谢谢你的想法!