フォームの干渉を伴わないブラウザ ウィンドウの終了イベントのキャプチャ
ブラウザ ウィンドウ (またはタブ) が閉じたときに特にトリガーされるイベントを望むのは一般的です。 。ただし、通常この目的で使用される 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 サイトの他の関連記事を参照してください。