前提・実現したいこと
アルバイトのシフト作成のアプリを作っています。
DBに保存されたデータをjsを使い繰り返し処理されているdiv要素をshift_tableのtdの中にドラッグ&ドロップができるようにしたいと考えています。
発生している問題・エラーメッセージ
ドラッグする要素をeach文を使って記述する必要があり、そのためjsでIdを使っての操作ができず最初の1つ目の要素に対してのみドラッグ&ドロップができるようになってしまいます。(2つ目以降の要素はドラッグはできますが、ドロップしたらそこに1つ目の値が入り込む)
これを各値それぞれドラッグ&ドロップできるようにしたいのですが、どのように記述すればいいかがわからずに困っています。
該当のソースコード
Ruby,
1<div class="shift_main"> 2 <%= params[:date_save] %> 3 <div class="shift_set"> 4 <table class="shift_table"> 5 <tbody class="shift_table_body"> 6 <tr class="shift_line"> 7 <td id="shift_num1" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 8 <td id="shift_num2" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 9 </tr> 10 <tr class="shift_line"> 11 <td id="shift_num3" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 12 <td id="shift_num4" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 13 </tr> 14 <tr class="shift_line"> 15 <td id="shift_num5" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 16 <td id="shift_num6" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 17 </tr> 18 <tr class="shift_line"> 19 <td id="shift_num7" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 20 <td id="shift_num8" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 21 </tr> 22 <tr class="shift_line"> 23 <td id="shift_num9" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 24 <td id="shift_num10" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 25 </tr> 26 <tr class="shift_line"> 27 <td id="shift_num11" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 28 <td id="shift_num12" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 29 </tr> 30 <tr class="shift_line"> 31 <td id="shift_num13" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 32 <td id="shift_num14" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 33 </tr> 34 <tr class="shift_line"> 35 <td id="shift_num15" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 36 <td id="shift_num16" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 37 </tr> 38 <tr class="shift_line"> 39 <td id="shift_num17" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 40 <td id="shift_num18" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 41 </tr> 42 <tr class="shift_line"> 43 <td id="shift_num19" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 44 <td id="shift_num20" ondragover="onDragOver(event);" ondrop="onDrop(event);"></td> 45 </tr> 46 </tbody> 47 </table> 48 <table> 49 <tbody> 50 <% @num.each do |day| %> 51 <tr> 52 <td class="employee"> 53 <div id="human1" class="employee_name" draggable="true" ondragstart="onDragStart(event);"> 54 <%= day.name %> 55 </div> 56 </td> 57 </tr> 58 <% end %> 59 </tbody> 60 </table> 61 </div> 62</div> 63<script type="text/javascript"> 64 function onDragStart(event) { 65 event.dataTransfer.setData('text/plain', event.target.id); 66} 67 68function onDragOver(event) { 69 event.preventDefault(); 70} 71 72function onDrop(event) { 73 const id = event.dataTransfer.getData('text'); 74 const draggableElement = document.getElementById(id); 75 const dropzone = event.target; 76 dropzone.appendChild(draggableElement); 77 event.dataTransfer.clearData(); 78} 79</script> 80
試したこと
document.getElementsByClassNameを使って要素を取得し、それに対してArray.prototypeの操作をいくつか試しました。具体的にはforEachとsliceを使って試しましたがうまく行きませんでした。
補足情報(FW/ツールのバージョンなど)
Rubyのバージョンは6.0.0です。また、カレンダーの機能を使うためにsimplecalendarのGemを使用しています。
初学者にて質問に至らない点もあるかと思いますが、追記などはすぐに対応できるようにしますので、お答えいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/04 09:37
2021/02/04 10:02
2021/02/05 05:55