0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

formのdisabled要素はsubmitされない

Posted at

当たり前な話かも知れないが、知らなかったのでメモする。

私がやりたかったこと

フォーム要素は「Aドロップダウンリスト」と「Bテキストボックス」二つ。

仕様上、上記フォーム要素は関連があって、
Aドロップダウンリストから特定の要素を選択すると、Bテキストボックスの値に固定値0を埋める。

固定値なので、Bテキストボックスを非活性化し、ユーザーがいじれないようにしたい。

最後に送信ボタンを押すとAドロップダウンリストの選択肢とBテキストボックスの値を送信する。

しかし、

disabled 属性がついたフォーム要素は、submit送信されなかった。

解決方法

disabledの代わりにreadonlyを使う

<input type="text" name="B" id="B">
<script>
  ...
  // Aドロップダウンリストから特定の要素を選択したとき
  document.getElementById("B").value = "0";
  document.getElementById("B").readOnly = true;
  ...
</script>

hiddenのinputを追加する

<input type="text" id="B">
// ドロップダウンリストから特定の要素を選択したとき
<script>
  ...
  // Aドロップダウンリストから特定の要素を選択したとき
  document.getElementById("B").value = "0";
  document.getElementById("B").disabled = true;
  ...
</script>
<script>
  // フォーム送信時にhiddenのinputを追加
  document.getElementById("myForm").addEventListener("submit", function(event) {
    var hiddenInput = '<input type="hidden" name="B" value="0">';
    document.getElementById("myForm").insertAdjacentHTML('beforeend', hiddenInput);
  });
</script>

ユーザーにはdisabledで編集不可のテキストボックスを見せて実際の値はhiddenのinputで送信する。

JavaScriptで送信前にdisabledを解除

<input type="text" id="B" name="B">
// ドロップダウンリストから特定の要素を選択したとき
<script>
  ...
  // Aドロップダウンリストから特定の要素を選択したとき
  document.getElementById("B").value = "0";
  document.getElementById("B").disabled = true;
  ...
</script>
<script>
  // フォーム送信時にdisabledを解除
  document.getElementById("myForm").addEventListener("submit", function(event) {
    // Bテキストボックスのdisabled属性を解除
    document.getElementById("B").disabled = false;
  });
</script>

固定値おならバックエンドで処理してもOK

####( ・。。・ )🖐

間違っている内容がありましたら、教えて頂ければ喜びます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?