js 「getElementById(〇〇〇).submit()」でエラー

jqueryじゃなくてjavascriptでsubmit()したときのエラー

作成日:2019-04-08, 更新日:2019-04-08

エラー内容

Uncaught TypeError: document.getElementById(...).submit is not a function

▼原因と対策
・「name=submit」がいたので別名にした(※とりあえず「name=btn-send」にした)

経緯

1.他所様が用意してくれたJavascriptを使うコトになった
2.その中で「document.getElementById(〇〇〇).submit();」がいた
3.html部は適当に修正(「<input name="submit" type="button" ~>」を追加)
4.実行すると「Uncaught TypeError: document.getElementById(...).submit is not a function」が出てきた

メモ

何気に面倒な改修が必要になった・・・

以下は、余計なモノを削除したソースたち

▼元のソース:単純にsubmitされていたら結果を表示ってヤツ

<?php if( !isset($_POST["submit"]) ) { ?>
<form method="post">
  <input type="submit" name="submit">
</form>
<?php } else { ?>
  echo "送信された";
<?php } ?>

JSで「submit()」する必要があるので「type=submit」を「type=button」にしてJSを組み込んだ。

▼改修後のソース:「Uncaught TypeError: document.getElementById(...).submit is not a function」になる

<?php if( !isset($_POST["submit"]) ) { ?>
<form method="post" id="id_jsSend">
  <input type="button" name="submit" onclick="jsSend()">
</form>
<?php } else { ?>
  echo "送信された";
<?php } ?>
<script>
  function jsSend() {
    document.getElementById("id_jsSend").submit();
  }
</script>

「name=submit」があるとダメだというので「name=submit」を「name=name_jsSend」にしてみた

▼submit()のエラー改修後のソース

<?php if( !isset($_POST["submit"]) ) { ?>
<form method="post" id="id_jsSend">
  <input type="button" name="name_jsSend" onclick="jsSend()">
</form>
<?php } else { ?>
  echo "送信された";
<?php } ?>
<script>
  function jsSend() {
    document.getElementById("id_jsSend").submit();
  }
</script>

$_POST["submit"]が取れない

jsで「submit()」をすると「if( !isset($_POST["submit"]) ){}」が真になる(※「echo "送信された";」が実行されない)

「$_POST」をvar_dump()すると「<input type="button" name="name_jsSend">」が取れていなかった。
面倒だったのでhiddenで「name=js_submit」を追加して「$_POST["js_submit"]」を条件にすることでひとまず解決。

<?php if( !isset($_POST["js_submit"]) ) { ?>
<form method="post" id="id_jsSend">
  <input type="hidden" name="js_submit" value="1">
  <input type="button" onclick="jsSend()">
</form>
<?php } else { ?>
  送信された。
<?php } ?>
<script>
  function jsSend() {
    document.getElementById("id_jsSend").submit();
  }
</script>