3

デバッグを通じて、フォーム要素name="submit"に名前を付けるべきではないことがわかりましたが、検索した後でも、理由の適切な説明が見つかりませんでしたか?

以下の簡単なコード例を参照してください。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <form action="javascript:alert('submitted');" method="post" id="test-form">
            <label>Name</label>
            <input type="text" name="name-field" value="" />
            <input type="submit" name="submit" value="Submit Button" /> <!-- name should not be "submit" -->
            <p><a href="javascript: document.getElementById('test-form').submit();">Submit Link</a></p>
        </form>
    </body>
</html>
  • フォーム要素でEnterキーを押すか、 [送信]ボタンをクリックする と、機能します。
  • [送信]リンクをクリックすると、エラーが発生します

    未処理のエラー:'document.getElementById(' test-form')。submit'は関数ではありません

送信ボタンの名前を(一部を大文字にしただけでも)以外の名前に変更するか、属性を削除するだけで、送信ボタンと送信リンクの両方機能ますname="submit"name="submit"

これを最新バージョンのInternetExplorer、Firefox、Opera、Chrome、Safariで試しました。それらのすべては、これに関して一貫した振る舞いをしています。

私のコード例でわかるように、jQueryやその他のJavaScriptライブラリは関与していません。

説明をいただければ幸いです。ありがとう

4

3 に答える 3

5

ここでMozillaのドキュメントを確認する場合:https ://developer.mozilla.org/en-US/docs/DOM/HTMLFormElement

.submit()フォームにメソッドがあることがわかります。

さらに、フォームにはフォーム内のフィールドも入力されます。

(ここに1つの例があります: http ://www.devbay.com/articles/javascript/accessing-form-elements-array-with-javascript/発生するはず の参照が見つかりませんが、発生するだけです。)

したがって、submitそれと呼ばれる要素を作成すると、フォームの組み込みsubmit()メソッドがオーバーライドされます。要素は関数ではないため、エラーメッセージが表示されます。

于 2012-09-04T22:27:52.303 に答える
2

フォームに名前が付けられ"foo"ていて、フィールドがあるとします"firstName"

foo.firstNameフォームのそのフィールドです。

foo.submit()submitフォームのメソッドであるため、そのフォームを送信します。

フォームフィールドとして再定義submitすると、メソッドが上書きされますsubmit

于 2012-09-04T22:27:52.697 に答える
1

submitはフォーム入力タイプであり、javascriptの識別子としても使用されると思います。したがって、送信ボタンに「送信」という名前を付けると、JavaScriptでの「送信」の使用があいまいになります。

于 2012-09-04T22:27:11.487 に答える