【发布时间】:2022-01-10 14:18:35
【问题描述】:
如果用户填写了一半的表单,并且如果用户在没有提交该表单的情况下导航另一个 URL,他应该得到确认,如果他确认了,那么他应该导航。如何在 Javascript 中实现这一点?
【问题讨论】:
标签: javascript navigation uinavigationcontroller
如果用户填写了一半的表单,并且如果用户在没有提交该表单的情况下导航另一个 URL,他应该得到确认,如果他确认了,那么他应该导航。如何在 Javascript 中实现这一点?
【问题讨论】:
标签: javascript navigation uinavigationcontroller
有两个选项可以解决此问题 - 第三方解决方案和自定义解决方案。 (我推荐第三方解决方案,后面我会解释原因)
jquery.dirty 提供了检测表单是否被更改,并防止用户在显示提示时离开页面的功能。它还具有其他有用的功能,例如重置表单,以及将表单的当前状态设置为“干净”状态。示例用法:
$("#myForm").dirty({preventLeaving: true});
当窗口、文档和它的资源即将被卸载时,beforeunload 事件被触发。此时文档仍然可见,并且事件仍然可以取消。
在实现代码之前,我们需要面对几个问题(可以解决)。
var formSubmitting = false;
var setFormSubmitting = function() { formSubmitting = true; };
window.onload = function() {
window.addEventListener("beforeunload", function (e) {
if (formSubmitting) {
return undefined;
}
var confirmationMessage = 'It looks like you have been editing something. '
+ 'If you leave before saving, your changes will be lost.';
(e || window.event).returnValue = confirmationMessage;
return confirmationMessage;
});
};
var isDirty = function() { return false; }
window.onload = function() {
window.addEventListener("beforeunload", function (e) {
if (formSubmitting || !isDirty()) {
return undefined;
}
var confirmationMessage = 'It looks like you have been editing something. '
+ 'If you leave before saving, your changes will be lost.';
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc.
});
};
【讨论】: