前提・実現したいこと
アルバイトのシフト作成のアプリを作っています。
DBに保存されたデータをjsを使い繰り返し処理されているdiv要素をshift_tableのtdの中にドラッグ&ドロップができるようにしたいと考えています。
発生している問題・エラーメッセージ
下記のエラーが発生し、ドラッグする要素,ドラッグ後に入れ込む要素共に取得できません。ファイルの配置の問題かと思い、ファイルの移動やファイルを参照するコードを変更などしてみたのですがうまく行きません。
Uncaught ReferenceError: onDragStart is not defined at HTMLDivElement.ondragstart Uncaught ReferenceError: onDragOver is not defined at HTMLTableCellElement.ondragover
該当のソースコード
Ruby,
1html 2 3<div class="shift_main"> 4 <%= params[:date_save] %> 5 <div class="shift_set"> 6 <table class="shift_table"> 7 <tbody class="shift_table_body"> 8 <tr class="shift_line"> 9 <td id="shift_num1"></td> 10 <td id="shift_num2"></td> 11 </tr> 12 <tr class="shift_line"> 13 <td id="shift_num3"></td> 14 <td id="shift_num4"></td> 15 </tr> 16 <tr class="shift_line"> 17 <td id="shift_num5"></td> 18 <td id="shift_num6"></td> 19 </tr> 20 <tr class="shift_line"> 21 <td id="shift_num7"></td> 22 <td id="shift_num8"></td> 23 </tr> 24 <tr class="shift_line"> 25 <td id="shift_num9"></td> 26 <td id="shift_num10"></td> 27 </tr> 28 <tr class="shift_line"> 29 <td id="shift_num11"></td> 30 <td id="shift_num12"></td> 31 </tr> 32 <tr class="shift_line"> 33 <td id="shift_num13"></td> 34 <td id="shift_num14"></td> 35 </tr> 36 <tr class="shift_line"> 37 <td id="shift_num15"></td> 38 <td id="shift_num16"></td> 39 </tr> 40 <tr class="shift_line"> 41 <td id="shift_num17"></td> 42 <td id="shift_num18"></td> 43 </tr> 44 <tr class="shift_line"> 45 <td id="shift_num19"></td> 46 <td id="shift_num20" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 47 </tr> 48 </tbody> 49 </table> 50 <table> 51 <tbody> 52 <% @num.each do |day| %> 53 <tr> 54 <td class="employee"> 55 <div id="human1" class="employee_name" draggable="true" ondragstart="onDragStart(event);"> 56 <%= day.name %> 57 </div> 58 </td> 59 </tr> 60 <% end %> 61 </tbody> 62 </table> 63 </div> 64</div>
js drag_and_drop.js function onDragStart(event) { event.dataTransfer.setData('text/plain', event.target.id); event.currentTarget.style.backgroundColor = 'yellow'; } function onDragOver(event) { event.preventDefault(); } function onDrop(event) { const id = event.dataTransfer.getData('text'); const draggableElement = document.getElementById(id); const dropzone = event.target; dropzone.appendChild(draggableElement); event.dataTransfer.clearData(); }
試したこと
ファイルの場所の検討とjsファイルの中の変数など色々といじってみましたが、自力での解決ができませんでした。
https://www.digitalocean.com/community/tutorials/js-drag-and-drop-vanilla-js-ja
コードは上記の記事を参考に記述しました。
補足情報(FW/ツールのバージョンなど)
Rubyのバージョンは6.0.0です。また、カレンダーの機能を使うためにsimplecalendarのGemを使用しています。
初めての質問で至らない点もあるかと思いますが、追記などはすぐに対応できるようにしますので、お答えいただけると幸いです。
追記
ファイルの情報が不十分でした。
こちらはappulication.jsにて
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") require("drag_and_drop")
上記のファイルを呼び出しています。
またapplication.html.erbでは
<!DOCTYPE html> <html> <head> <title>ShiftApp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.18.1/build/cssreset/cssreset-min.css"> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <%= yield %> </body> </html>
といった記述をしています。
ファイル構成としては
app
→javascript
→→packs
→→→application.js
→→drag_and_drop.js
→views
→→layouts
→→→application.html.erb
→→shift
→→→create.html.erb
上記の構成になっています。
回答1件
あなたの回答
tips
プレビュー