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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-29 11:15:11450ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。