目次

目次

JavaScript側でsubmitができない

アバター画像
海津 純平
アバター画像
海津 純平
最終更新日2019/01/22 投稿日2019/01/22

はじめに

JavaScriptで submit() 関数が上手く動かずハマってしまいました。

どんなことが起こったか

以下実際の状況を簡易化したコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
</head>
<body>
  <form id="fm">
    <button type="button" id="btn" name="submit">ボタン</button>
  </form>
  <script>
    // form内のbuttonをクリックしたときのイベント追加
    document.querySelector('#btn').addEventListener('click', function() {
      // formを内容を送信
      document.querySelector('#fm').submit();
    });
  </script>
</body>
</html>

ボタンを押してsubmitさせようとすると、以下のようなエラーが出ます。

Uncaught TypeError: document.querySelector(...).submit is not a function at HTMLButtonElement.<anonymous>

submitは関数じゃないって怒られました。
なんで????????????

原因

結論から言うとbuttonの name="submit" が原因でした。
form内の要素はname属性の値を使って取得することもできます。
例えば以下のような書き方です。

<html lang="ja">
<head>
</head>
<body>
  <form id="fm">
    <input type="text" name="hoge">
  </form>
  <script>
    // テキスト入力欄のnameの値 hoge を指定
    console.log(document.querySelector('#fm').hoge);
    // 出力: <input type="text" name="hoge">
  </script>
</body>
</html>

つまり、 document.querySelector('#fm').submit() はsubmit関数ではなく、
form内のbutton要素を見てしまいます。
実際にconsoleに出力してみても、確かにbutton要素を見ていました。

document.querySelector('#btn').addEventListener('click', function() {
  console.log(document.querySelector('#fm').submit);
︙

↓出力

<button type="button" id="btn" name="submit">ボタン</button>

まとめ

ちなみにid属性の値をsubmitにしても同じことが言えます。 id属性やname属性の値はsubmitにしないようにしましょう。

アバター画像

海津 純平

目次