5

フォームの中にボタンがあります。このようにJavaScriptでフォームを送信する場合の違いは何ですか

<button onclick="document.forms[0].submit();">

このように提出すると

<button type="submit"></button>?

最初のものは、Webkitベースを除くほとんどのブラウザーで機能します。後者も問題なく動作します。機能の違いは私には明らかではありません。ありますか?

4

4 に答える 4

9

最初の例:

<button onclick="document.forms[0].submit();">

...2つのことを行います:

  1. ドキュメントの最初のフォーム(つまり、の0インデックスで指定されたフォーム)onclickを送信します。forms[0]
  2. type属性が指定されていないボタンはデフォルトで送信ボタンになるため、(フォーム内にある場合は)フォームを送信します。

この2段階の二重送信動作は、次の簡単で汚いデモで見ることができます:http: //jsfiddle.net/fMwuX/(そして、デバッグを少し混乱させるかもしれない奇妙な動作につながる可能性があります)。ボタンが実際にフォームにない場合、これは問題になりません。

2番目の例:

<button type="submit"></button>

フォームを送信するだけです(フォームが1つある場合)。

私の意見では、2番目のオプションは、次のようないくつかの理由で間違いなく望ましいと思います。

  1. ユーザーがJSを無効にしている場合でも機能します。
  2. フォームインデックスを。でハードコーディングしませんforms[0]
  3. それはより短く、より明確です。
  4. 他のフォーム送信検証と衝突することはありません。
于 2012-06-28T08:07:44.997 に答える
3

javascriptの例では、HTMLドキュメントの最初のフォームを送信し、2番目の例ではそのボタンをラップするフォームを送信します。

于 2012-06-28T07:48:08.120 に答える
1

documents.forms[0].submitHTMLページの最初のフォームの送信をトリガーします。確かに、documents.formsあなたの文書のすべての形式が含まれています。名前属性またはインデックスを使用してアクセスできます。

次に、フォームにタイプを入力するsubmitと、親フォームの送信がトリガーされます。

于 2012-06-28T07:54:25.327 に答える
-1

あなたが発見したように、最初のものはある状況でページが機能しないようにします、そして-これと他の理由のために-一般的に悪い習慣と考えられています。2番目を使用します。

于 2012-06-28T07:53:38.273 に答える