前提・実現したいこと
複数選択が可能なセレクトボックスにおいて、articlesを選択肢に含んだ場合にonchangeを発動するというjavascriptを描きたいです。
以下が実際のフォームのコードです。
今回はarticlesを選ぶとhidden1の設問が現れるようなonchangeを記載しているつもりなのですが、
if(value.includes('articles'))としたところ、articlesを単体で選ぶとhidden1が現れるものの
articlesを選びながら他の選択肢を追加すると、hidden1が消えてしまいます。
こいった場合、includeでは想定の動きができないのでしょうか。
articlesを含む複数選択をした際もhidden1が現れるような記載方法について、
見当のつく方がいらっしゃればアドバイスいただけないでしょうか。
よろしくお願いいたします。
<%= semantic_form_for [:admin, @ad] do |f| %> <%= f.inputs do %> <li> <% @ad_places = AdPlace.all %> <label class="label">ad_place</label> <select class="chosen-select" name="ad[ad_place]" id="ad_ad_place"> <option value="">選択してください</option> <% @ad_places.each do|place| %> <option value=<%= place.name %>><%=place.name %></option> <% end %> </select> </li> <li> <label class="label">menu</label> <select multiple="multiple" name="ad[menu][]" id="ad_menu" onchange="menufunc()"> <option value="">選択してください</option> </select> </li> <li id="hidden1"> <% @tags = Tag.all %> <label class="label">article_tag_no</label> <ol class="checkboxes"> <% @tags.each do|tag| %> <%= f.check_box :article_tag_no, {multiple: true}, tag.no, nil %>  <%= tag.name %> <% end %> </ol> </li> <% end %> <%= f.actions %> <% end %> <script> document.getElementById("hidden1").style.display ="none"; function menufunc(value) { var value = document.getElementById("ad_menu").value; var hidden1 = document.getElementById("hidden1"); if(value.includes('articles')){ hidden1.style.display ="block"; } else{ hidden1.style.display ="none"; } } </script> <script> window.onload = function() { // 掲載場所の選択肢 menu = document.getElementById("ad_menu"); // メニューの選択肢が変更された際の動作 place = document.getElementById("ad_ad_place"); place.onchange = changePlace; } // 掲載場所の選択肢が変更された際の動作 function changePlace() { // 変更後の掲載場所を取得 var changePlace = place.value; if (changePlace == "side_bar") { // sidebarが設定された場合 setSideBar(); } } // sidebarに広告を掲載するメニューの選択肢を設定する function setSideBar() { // メニューの選択肢を空にする menu.textContent = null; // メニューの選択肢 var SideBar = [ {cd:"", label:"選択して下さい"}, {cd:"home", label:"home"}, {cd:"nursery_search", label:"nursery_search"}, {cd:"taiki_infos", label:"taiki_infos"}, {cd:"fee_infos", label:"fee_infos"}, {cd:"articles", label:"articles"}, ]; SideBar.forEach(function(value) { var op = document.createElement("option"); op.value = value.cd; op.text = value.label; menu.appendChild(op); }); } </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 13:35