У меня есть веб-страница с формой на ней; Я хочу предупредить пользователя, если они уйдут. Я не выполнил грязный проверка поэтому мой onbeforeunload
код простоsetTimeout (x, 0) не задерживается в Chrome
window.onbeforeunload = function() {
return 'message'
};
Я не хочу это предупреждение, когда они представить форму, поэтому я удалить событие на кнопку. Тем не менее, подача может сбой, поэтому мне нужно вернуть событие после этого (так что если они , то отходят, они все равно предупреждаются). С этой целью я сделал следующее:
var tempDisableBeforeUnload = function() {
var obu = window.onbeforeunload;
if (obu) {
window.onbeforeunload = null;
setTimeout(function() {
window.onbeforeunload = obu;
}, 0);
}
}
$("form.noWarnOnSubmit").submit(tempDisableBeforeUnload);
Это отлично работает в Firefox и IE - setTimeout(x, 0)
не задерживает восстановление обработчика событий до после submit
решил, является ли он успешным или нет.
Однако в Chrome время ожидания появляется немедленно, и я получаю предупреждение при отправке формы.
Как я могу сделать эту работу в Chrome, или как еще я могу достичь конца «не предупреждать о отправке, но оставьте предупреждение, если сбой подачи»?
Можете ли вы определить, что вы имеете в виду отправке был ли успешным? Вы имеете в виду потенциально другие обработчики событий, вызывающие 'preventDefault' и т. Д.? –
Он работает в Chrome: http://jsbin.com/bavayuwohu/3/edit. По крайней мере, для меня (v39). –
@JamesThorpe Да, у меня есть ненавязчивая проверка работоспособности, и это потенциально отменяет отправку. – Rawling