前提・実現したいこと
プログラミングに初めて触れたばかりの初心者で初めての質問なので、初歩的なミスだと思うのですがお手柔らかにお願いいたします。
javascriptで編集ボタンをクリックすると非同期通信でラベルが非表示になりコメントエリアが表示されるようにしたいです。WebアプリケーションはRailsを使っています。
発生している問題
なんとか表示非表示の変更ができるようになったのですが、初回ロードした後一度リロードしなければ編集ボタンをクリックするというイベント発火ができません。DOMContentLoadedイベントがページ遷移の際に発火されません。
該当のソースコード
js
1window.addEventListener('DOMContentLoaded', () => { 2 const corporateEditButton = document.getElementById("js-edit-corporate-btn"); 3 corporateEditButton.addEventListener("click", () => { 4 const corporateListTitle = document.getElementById("js-corporate-label") 5 var corporateLabelArea = document.getElementsByClassName("corporate-data") 6 var corporateTextArea = document.getElementsByClassName("corporate-text") 7 const corporateButton = document.getElementById("js-corporate-button") 8 const corporateFormButton = document.getElementById("button-box") 9 for(let i = 0; i < 13; i++) { 10 corporateFormButton.style.display = "none"; 11 corporateListTitle.style.display = "none"; 12 corporateLabelArea[i].style.display = "none"; 13 corporateTextArea[i].style.display = "block"; 14 corporateButton.style.display = "block"; 15 } 16 }); 17});
html
1 <div class='list-title-show'> 2 <h2 id='js-corporate-label'> 3 <%= @corporate.name %> 4 </h2> 5 <div id="js-textarea-corporate" class="list-title-edit"> 6 <input style="display: none;" class="corporate-text" value=<%= @corporate.name %>> 7 </div> 8 </div> 9 <div class='corporate-info'> 10 <p class='corporate-data'> 11 <%= @corporate.industry %> 12 </p> 13 <input style="display: none;" class="corporate-text" value=<%= @corporate.industry %>> 14 <p class='corporate-data'> 15 <%= @corporate.capital %> 16 </p> 17 <input style="display: none;" class="corporate-text" value=<%= @corporate.capital %>> 18 <p class='corporate-data'> 19 <%= @corporate.business_content %> 20 </p> 21 <input style="display: none;" class="corporate-text" value=<%= @corporate.business_content %>> 22 <p class='corporate-data'> 23 <%= @corporate.strength %> 24 </p> 25 <input style="display: none;" class="corporate-text" value=<%= @corporate.strength %>> 26 <p class='corporate-data'> 27 <%= @corporate.weakness %> 28 </p> 29 <input style="display: none;" class="corporate-text" value=<%= @corporate.weakness %>> 30 <p class='corporate-data'> 31 <%= @corporate.others %> 32 </p> 33 <input style="display: none;" class="corporate-text" value=<%= @corporate.others %>> 34 <div id="button-box"> 35 <div class='form-btn-box'> 36 <span class="form-btn", id="js-edit-corporate-btn">編集</span> 37 <%=link_to 'もどる', root_path, class:"back-btn" %> 38 </div> 39 </div> 40 <div class='form-btn-box' id="js-corporate-button" style="display: none;"> 41 <button data-update type="submit" class="form-btn">変更</button> 42 <button data-cancel type="button" id = "cancel-id" class="edit-back-btn">キャンセル</button> 43 </div> 44 </div>
試したこと
初めはloadイベントを使っていたのですが、DOMツリーの構築が完了した時点でイベント発火されるDOMContentLoadedイベントの方が速いということが分かりDOMContentLoadedイベントに変更しました。それでも同じように一度ロードしなければならないのは変わりませんでした。
alert()やconsole.log()で動きを確認しましたが、やはり初回ロードでは反応せずもう一度ロードした際に反応がありました。
loadイベントやDOMContentLoadedイベントでは初回ロードでイベント発火させることはできないのでしょうか?
何かご助言を頂けたら幸いです。

回答1件
あなたの回答
tips
プレビュー