ホームページ > ウェブフロントエンド > jsチュートリアル > フォーム送信を妨げずにブラウザ ウィンドウの終了イベントをキャプチャする方法

フォーム送信を妨げずにブラウザ ウィンドウの終了イベントをキャプチャする方法

Susan Sarandon
リリース: 2024-12-29 11:15:11
オリジナル
446 人が閲覧しました

How to Capture Browser Window Close Events without Form Submission Interference?

フォームの干渉を伴わないブラウザ ウィンドウの終了イベントのキャプチャ

ブラウザ ウィンドウ (またはタブ) が閉じたときに特にトリガーされるイベントを望むのは一般的です。 。ただし、通常この目的で使用される beforeunload イベントは、フォームの送信にも反応します。このイベントのトリガーからフォーム関連のアクションを除外するにはどうすればよいですか?

答え:

理由に関係なく、ユーザーが現在のページから離れるたびに beforeunload イベントが発生します。 。これには、フォームの送信、リンクのクリック、別のページへの直接のナビゲーションが含まれます。これらのアクションを除外するには、次のコードを利用できます:

var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });

$(window).on("beforeunload", function() { 
    return inFormOrLink ? "Do you really want to close?" : null; 
})
ログイン後にコピー

または、1.7 より前の jQuery バージョンを使用している場合は、次のコードをお勧めします:

var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });

$(window).bind("beforeunload", function() { 
    return inFormOrLink ? "Do you really want to close?" : null; 
})
ログイン後にコピー

このソリューションでは、ユーザーがハイパーリンクをクリックするかフォームを送信すると、FormOrLink のフラグが true に設定されます。 beforeunload イベント中にこのフラグがチェックされ、これが false の場合、イベントはキャプチャされません。

重要な注意事項:

他のイベント ハンドラーがフォームの送信やナビゲーションが行われないようにします。このような場合、ウィンドウを閉じたときに beforeunload イベントが引き続き発生し、確認プロンプトが失われます。これを軽減するには、クリック イベントと送信イベントの時間を記録し、アンロード前が大幅に遅れて発生するかどうかを確認して、そのような状況に対処できるようにします。

以上がフォーム送信を妨げずにブラウザ ウィンドウの終了イベントをキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート