Rails上で、JavaScriptを使用する方法についてご教示いただきたいです。
■開発環境
・Rails6.0
・Ruby 2.6.3
・AWS cloud9
■困っていること
Railsでモーダルウインドウを作成しようとしているのですが、JavaScriptが反応しません。
下記の手順で実装しようとしております。
①application.html.erbに下記のコードを記入
<!DOCTYPE html> <html> <head> <title><%= full_title(yield(:title)) %></title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> <%= render 'layouts/shim' %> </head>
②index.html.erbにモーダルのコードを記入
<h1>新着投稿<p class="post-button" id="open"><span>投稿をする</span></p></h1> ・ ・ ・ <div id="mask" class="hidden"></div> <div id="modal" class="hidden"> <h2>課題曲を投稿する</h2> <%= form_with model: @hmhr_practice,local: true do |f| %> <div> <label>名前</label> <%= f.text_field :name, class: "form-control", id: "js-name" %> <p id='js-name-error' class="hidden">名前を入力してください。</p> </div> <div> <label>タイトル</label> <%= f.text_field :title, class: "form-control",id: "js-title" %> <p id='js-title-error' class="hidden">タイトルを入力してください。</p> </div> <div> <label>内容</label> <%= f.text_area :content, class: "form-control",id: "js-content" %> <p id='js-content-error' class="hidden">投稿内容を入力してください。</p> </div> <div> <%= f.submit "投稿内容を確認する", class: "btn btn-primary", id: "submit",'data-disable-with' => false %> </div> <% end %> <div id="close"> 閉じる </div>
③app/javascript/packs/appliation.jsに下記のコードを記入
// This file is automatically compiled by Webpack, along with any other files // present in this directory. You're encouraged to place your actual application logic in // a relevant structure within app/javascript and only use these pack files to reference // that code so it'll be compiled. require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") // Uncomment to copy all static images under ../images to the output folder and reference // them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>) // or the `imagePath` JavaScript helper below. // // const images = require.context('../images', true) // const imagePath = (name) => images(name, true) 'use strict'; { const $open=document.getElementById('open'); const $close=document.getElementById('close'); const $modal=document.getElementById('modal'); const $mask=document.getElementById('mask'); const $submit=document.getElementById('submit'); $open.addEventListener('click', () => { $modal.classList.remove('hidden'); $mask.classList.remove('hidden'); }); $close.addEventListener('click', () => { $modal.classList.add('hidden'); $mask.classList.add('hidden'); }); $mask.addEventListener('click', () => { $close.click(); }); $submit.addEventListener('click', () => { if(document.getElementById('js-name').value==''){ document.getElementById('js-name-error').classList.remove('hidden'); } }); $submit.addEventListener('click', () => { if(document.getElementById('js-title').value==''){ document.getElementById('js-title-error').classList.remove('hidden'); } }); $submit.addEventListener('click', () => { if(document.getElementById('js-content').value==''){ document.getElementById('js-content-error').classList.remove('hidden'); } }); }
■気になっている箇所
application.html.erbの<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
のstylesheet_link_tag
は赤色に変わっているのに対して、
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
のjavascript_pack_tag
は白色のままということが気になっております。
色が変わっていないのは、うまく読み込めていないということでしょうか。
以上でございます。
恐れ入りますが、ご確認のほどよろしくお願いいたします。
あなたの回答
tips
プレビュー