🔨

HTML タグ属性 idでハマった話

2021/02/28に公開

あるwebサイトを開発中に自分の勘違いに気づいたため、残します。

事象

フォームに文字を入力し、送信ボタンを押すと、フォームの中身を空にしたいと考えました。
そこで、HTMLファイルには下記フォームを作りました。

  <div class="message-form">
    <%= form_with class: 'form', model: @message do |f| %>
      <%= f.text_field :text, class:"input-text", placeholder:"メッセージを入力してください(140文字まで)"%>
      <%= f.submit '送信', class:"submit-btn" %>
    <% end %>
  </div>

フォームの中身を削除するためにjavaScriptファイルを作成しました。

  const newMessage = document.getElementById('input-text');
  newMessage.value='';
  console.log('finished');

動作確認
文字入力後、送信ボタンを押したら、下記エラーが発生。このエラーを解決するまでに、時間を浪費してしまった。

Uncaught TypeError: Cannot set property 'value' of null

解決策

HTMLファイル内のテキストフィールドにidを設定していなかった。これによって、送信ボタンを押しても入力フォームの中身を空にできなかった。

  <div class="message-form">
    <%= form_with class: 'form', model: @message do |f| %>
      <%= f.text_field :text, id:"input-text", class:"input-text", placeholder:"メッセージを入力してください(140文字まで)"%>
      <%= f.submit '送信', class:"submit-btn" %>
    <% end %>
  </div>

できなかった原因

HTMLタグのid classの違いを理解していなかった

classをタグの属性として設定していれば、javascriptで取得できると勘違いしていた。

idとは

HTMLタグに設定できる属性である。しかし、同一のHTMLファイルではid名の重複はNG。
ただ、javascriptにてid取得したい場合は、設定する必要がある

classとは

HTMLタグに設定できる属性である。classは同一のHTMLファイルでは名前の重複はOK。

Discussion