JavaScript
において、radio
ボタンによって、条件分岐を行いたいのですが、上手く条件分岐できません。- チュートリアルをみながら行っているのですが、
document.forms
にて変数を定義後、条件分岐でif (trouble_message){
と入れてみたりしているのですが、上手く反映できません。 - 条件分岐を入れずに、それぞれがビュー上に
li
が反映されることは確認ができています。
教えていただけたら幸いです。
ruby
1(省略) 2 <main class="container-chat"> 3 <div class="form-area"> 4 <div class="form-chat"> 5 <%= form_with(model: @trouble,id: "self_compassion") do |f| %> 6 <%= f.label :trouble, "悩みをつぶやく"%> 7 ⭐️↓:troubleを選択したものは、HTML_troubleをinsertAdjacentHTMLしたい。 8 <%= f.radio_button :message_type, :trouble %> 9 <%= f.label :encouragement, "励ましの言葉をかける" %> 10 ⭐️↓:encouragementを選択したものは、HTML_encouragementをinsertAdjacentHTMLしたい。 11 <%= f.radio_button :message_type, :encouragement %> 12 <%= f.text_field :worry, id: "content_worry", placeholder: "メッセージを入力" %> 13 <%= f.submit "POST" , id: "submit_message"%> 14 <% end %> 15 </div> 16 </div> 17 <%# 最新のメッセージが反映される場所 %> 18 <div id="list_messages"> 19 <ul class="messages"> 20 </ul> 21 </div> 22(省略)
JavaScript
1function post() { 2 const submit = document.getElementById("submit_message"); 3 submit.addEventListener("click", (e) => { 4 const formData = new FormData(document.getElementById("self_compassion")); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("POST", "/troubles", true); 7 XHR.responseType = "json"; 8 XHR.send(formData); 9 XHR.onload = () => { 10 if (XHR.status != 200) { 11 alert(`Error ${XHR.status}: ${XHR.statusText}`); 12 return null; 13 } 14 const item = XHR.response.trouble; 15 const list = document.getElementById("list_messages"); 16 const formText = document.getElementById("content_worry"); 17 18 // const trouble_message = document.forms.message_type.trouble_message_type_trouble; 19 // const encouragement_message = document.forms.message_type.trouble_message_type_encouragement; 20 21 ⭐️ここをどう表現したらいいのかわからない 22 if radioボタンがtroubleを選択していたら 23 24 const HTML_trouble= ` 25 <li class="message-left-side"> 26 <div class="pic-chat"> 27 <img src="/assets/sad.png" alt="落ち込んでいる画像"> 28 </div> 29 <div class="text-chat"> 30 <div class="post-content"> 31 ${item.worry} 32 </div> 33 <div class="post-date"> 34 投稿日時:${item.created_at} 35 </div> 36 </li>`; 37 list.insertAdjacentHTML("afterend", HTML_trouble); 38 39 ⭐️ここをどう表現したらいいのかわからない 40 else radioボタンがencouragementを選択していたら 41 42 const HTML_encouragement= ` 43 <li class="message-right-side"> 44 <div class="pic-chat"> 45 <img src="/assets/kind.png" alt="励ましている画像"> 46 </div> 47 <div class="text-chat"> 48 <div class="post-content"> 49 ${item.worry} 50 </div> 51 <div class="post-date"> 52 投稿日時:${item.created_at} 53 </div> 54 </li>`; 55 list.insertAdjacentHTML("afterend", HTML_encouragement); 56 57 ⭐️end 終わり 58 59 formText.value = ""; 60 }; 61 e.preventDefault(); 62 }); 63} 64window.addEventListener('load', post); 65
環境はES6でOKですか?
RubyのソースではなくHTMLに書き起こしてもらったほうが
回答が付きやすいと思います
サーバーサイドの言語は環境を一緒にしづらいのでjsの質問には不向きです。
コメントありがとうございます。
Railsを中心に行っていて、
`require("../post")`という形で、このJavaScriptを読み込んでいるのですが、
それがES6なのかが知識不足でわかっていません。
いつも`yarn install`をしています。
https://techracho.bpsinc.jp/hachi8833/2020_01_16/85940
このサイトで言うとYarnなのでしょうか?
(yambejpさんの質問の回答になっていなかったら申し訳ありません)
ES6は、ブラウザを足切りしていいですね?ということです
IEとか無視してでしょうか?
またrubyの箇所をHTMLに書き直すのを検討下さい
ブラウザにソース表示してコピペすればイケルと思いますが・・・
ブラウザにソース表示してコピペすればイケルと思いますが・・・
>>教えてくれてありがとうございます。下記です。
```html
</header>
<main class="container-chat">
<div class="form-area">
<div class="form-chat">
<form id="self_compassion" action="/troubles" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="X6idU9bLjZcP8QC+TVp+6vC/oBn/s/676NFHBcJ3DpWokcQ5jJq9Ph7UDU4AcQIuQMS1wUoju1hjzaDBRH9/XQ==" />
<label for="trouble_trouble">悩みをつぶやく</label>
<input type="radio" value="trouble" checked="checked" name="trouble[message_type]" id="trouble_message_type_trouble" />
<label for="trouble_encouragement">励ましの言葉をかける</label>
<input type="radio" value="encouragement" name="trouble[message_type]" id="trouble_message_type_encouragement" />
<input id="content_worry" placeholder="メッセージを入力" type="text" name="trouble[worry]" />
<input type="submit" name="commit" value="POST" id="submit_message" data-disable-with="POST" />
</form> </div>
```
ES6は、ブラウザを足切りしていいですね?ということです
IEとか無視してでしょうか?
>>ごめんなさい。この部分がわかりません。
現在、Chromeでlocal3000で確認しながら行っています。
非同期通信になるようなチャット部分を作っていました。
そして、「回答」の方に送った後に、気付きました!!!
本当にありがとうございます。
これから行ってみます。
回答1件
あなたの回答
tips
プレビュー