web-dev-qa-db-ja.com

フォームの送信と送信ボタンのonclick

[〜#〜] update [〜#〜]From @ BrendanEich

送信の@mplungjanonclickは、ボタンであることから外れます。フォームの送信は明らかに優れています。


フォームを送信する必要があるかどうかを判断するために送信ボタンのonclickを使用する理由はどれですか?

私はそれを強く信じています

  1. 送信前に何かを実行し、エラーが発生した場合に送信をキャンセルするには、フォームのonsubmitイベントがそれを置くための明白な場所です
  2. 送信ボタンのonclickを使用し、後でtype = "image"を使用することにした場合、多くのブラウザーでイベントハンドラーが失敗します。
  3. 送信をボタンに変更する場合は、onclickイベントハンドラーにも送信を追加する必要があります。

フォームのonsubmitよりも送信ボタンのonclickイベントを使用することを好む強い理由を探しています。

更新:フォームの送信と検証に関する問題の多くを個人的によく知っていることに注意してください。
たとえば、javascriptで送信しても、onsubmitはトリガーされません http://jsfiddle.net/mplungjan/3A4Ha/

<form onsubmit="alert('onSubmit called')">
    <input type="text" value="This will submit on enter but in IE the onclick is not triggered" style="width:100%"/><br/>
    <input type="submit" onclick="alert('Clicked')" />
</form><br />
<a href="#" onclick="alert('Submitting by script'); return false">Submit by script will not trigger onsubmit</a>

また、私のフィドルのフォームでEnterキーを押しても、IEはonclickをトリガーしません


歴史:

ここで議論に入った

無効にしないとhtmlボタンをクリックできません

manyが原因で、送信ボタンのonclickを何にでも使用することを強く嫌います。1 これが多くのブラウザ、主に古いバージョンのIEで機能しないことを何年も見てきました。明らかな理由をいくつか挙げましたが、それらは強化されたユーザーを納得させるものではないと確信しています。

SOのコミュニティは、w3schoolsを釘付けにしたように、これを壁に釘付けにするのを手伝ってくれますか?また、この質問を許容できる方法で表現する方法についても、遠慮なくコメントしてください。


1:NS2.xおよびIE3.02の時代から

14
mplungjan

フォームの送信は、送信ボタンをクリックするだけでなく、<ENTER>キーを使用してフォームを送信できるという単純な理由から、より正確なアプローチです。

13
Madara Uchiha

ボタンのonclickハンドラーよりもfromのonsubmitハンドラーを使用する直接的な理由はありません。意図に応じて名前付きイベントを使用する必要があります。

「送信」アクション(「電子メールを送信する」など)と「保存」(「ドラフト」など)の2つのアクションがあるシナリオを検討できます。前者のアクションは、一貫した方法でフォームに入力されることを前提としていますが、後者のアクションでは、ユーザーが好きな状態を維持できるようにする必要があります。そのため、クリックハンドラーは、検証とキャンセルを決定するのに理想的な場所になります。この場合の送信イベントの関連性は未定です。

問題をさらに複雑にするために、シナリオに自動保存と楽観的同時実行性を追加することができます。

IMHO何年にもわたる試行錯誤の結果、HTML5標準はボタン要素を支持して質問を決定しました。各ボタンでフォームのアクション、メソッドを個別に変更できるボタンの[form *]属性を参照してください。

0
Mx.Wolf