ユーザーがフォームの入力フィールドからEnterキーを押したときに、私は偶然の問題に遭遇していました。フォームが提出され、onbeforeunloadイベントが発生しました。私は、enterkeyコードをフィルタリングして、入力上のkeydownイベントでメッセージを表示しないようにフラグを設定しようとしました。これは、onbeforeunloadイベントが発生し、フラグが設定されていないときまでトリガされませんでした。
次に、jbabeyが示唆しているように_EVENTTARGETを調べました。フォームが送信されている場合は、そのフィールドに値があり、リフレッシュされていれば値はありません。
したがって、onbeforeunloadイベントの_EVENTARGETフィールドに値があるかどうかを確認することで、フォームからの入力がポストバックを引き起こしているかどうかを判断できます。
ここに私のコードです。我々は物事の下に行うことができますbeforeunload
イベントに
window.onbeforeunload = function (e) {
if ($('[id$=__EVENTTARGET]').val().indexOf('btnValidateMaterials') != -1) {
confirmExit = false;
}
if (DateOrQtyHasChanged() && confirmExit) {
if (/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) {
var message = $('[id$=hfLeaveMessageFF]').val();
if (confirm(message)) {
history.go();
}
else {
window.setTimeout(function() {
window.stop();
}, 1);
}
}
else {
var message = $('[id$=hfLeaveMessage]').val();
return message;
}
}
}
IE、FF、Chromeで 'document.activeElement'を使用しました。 –
fantastic @RoelvanDuijnhoven !! –
私はこれが受け入れられた答えであるべきだと思います! – EthR