Javascriptフォームハンドラーのバイパス
-
21-09-2019 - |
質問
ASP.NET MVC アプリケーションを作成しています。デフォルトでは、クライアント ブラウザに Javascript が搭載されている場合、ページ上のすべてのフォームのハンドラーは、JavaScript によって、送信内容を Ajax "パイプ" に送信するハンドラーに設定されます (プログレッシブ拡張)。
ただし、1 つのフォーム (複数のページ上) では、このハンドラーをバイパス/無視したいと考えています。これを行う簡単な方法はありますか?おそらく、DOM で直接独自の onsubmit イベントを指定してハンドラーをオーバーライドするか、または他の方法でしょうか?
私たちは jQuery を使用しているので、これらのライブラリを利用できます。
解決
おそらく、標準に違反するフォーム (AJAX 動作を持たないもの) に何らかの特徴的な属性を割り当てることで、これを解決できると思います。 class="oldschool"
. 。JavaScript コードでは、フォームに送信イベント ハンドラーを接続するときに、次の特別なマークが付いたフォームを必ず除外します。
$('form:not(.oldschool)').submit(function() {
// Do fancy AJAX stuff
});
アップデート: 順番に ない 外部 JavaScript ファイルを変更し、HTML マークアップを変更するだけで新しい動作を導入するには、次のようなことを検討してください。
<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">
決して美しいものではありませんが、少なくともここで利用できるブラウザでは十分な仕事をしているようです。
他のヒント
「DOM から」という意味を理解しているかどうかはわかりませんが、元の ajax/js コードを変更することはできないと思いますが、少し挿入することはできるはずです script
ajax 送信ハンドラーを設定するコードの後に実行されるタグをどこかに追加します。
さらに、ハンドラーセットが次の形式であると仮定します。 $("form").submit(...)
または同様のものを使用できます
$('selectorForYourForm').unbind('submit');
これは元の js コードの後に実行されるため、このフォームの送信アクションに設定された元のコードのハンドラーのバインドが解除されます。