絶対に有効です。
<form action="javascript:alert('Hello there, I am being submitted');">
<button type="submit">
Let's do it
</button>
</form>
<!-- Tested in Firefox, Chrome, Edge and Safari -->
簡単な答えとして、はい、これはオプションであり、素晴らしいものです。「送信したら、どこにも行かずにこのスクリプトを実行してください」と書かれています-かなり要点です。
マイナーな改善
どのフォームを扱っているかをイベント ハンドラーに知らせるには、sender オブジェクトを渡すのが明らかな方法のように思われます。
<form action="javascript:myFunction(this)"> <!-- should work, but it won't -->
しかし、意味のあるものの代わりにthis
、 Window オブジェクトを指します。どうやらjavascript:
リンクは別のスコープに住んでいます。したがって、次の形式をお勧めします。これはわずか 13 文字で、魅力的に機能します。
<form action="javascript:;" onsubmit="myFunction(this)"> <!-- now you have it! -->
...これで、送信者フォームに適切にアクセスできます。(単純な「#」をアクションとして記述できます。これは非常に一般的ですが、送信時に一番上までスクロールするという副作用があります。)
繰り返しますが、私はこのアプローチが気に入っています。「falseを返す」、jQuery / domReady、重火器はありません。それは、それがしているように見えることをするだけです。確かに他の方法も有効ですが、私にとってはこれがサムライの道です。
検証に関する注意事項
フォームは、onsubmit
イベント ハンドラーが何か真実を返す場合にのみ送信されるため、事前チェックを簡単に実行できます。
<form action="/something.php" onsubmit="return isMyFormValid(this)">
これでisMyFormValidが最初に実行され、それが false を返した場合でも、サーバーは気にしません。言うまでもなく、サーバー側でも検証する必要があり、それがより重要です。しかし、迅速かつ便利な早期発見のためには、これで問題ありません。