🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1307閲覧

Javascript ドラッグ&ドロップの機能でドロップがページ全体にできてしまう。ドロップできる場所を指定したい。

lemonediscream

総合スコア27

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/01/08 04:49

検索ボタンを押すと、データテーブルが表示されるようになっており、
データテーブルの中でドラッグ&ドロップしたいと思っております。
参考にしているサイトはこちらですリンク内容
また、デベロッパーツールのコンソールには添付画像の表示されています(dragenter,dragover,dropはすべて通っている様)。
ただ、dropがwebページ全体にできてしまっています。
イメージ説明
☆の部分でデータテーブル作成
★の部分でドラッグ&ドロップで使うdragdropというクラスを設定しています。
クラスのdragdropの部分がdropする場所に設定したいです。

js

1 2$(document).ready(function () { 3 4 var obj = $(".dragdrop"); 5 obj.on('dragenter', function (e) 6 { 7 e.stopPropagation(); 8 e.preventDefault(); 9 }); 10 obj.on('dragover', function (e) 11 { 12 e.stopPropagation(); 13 e.preventDefault(); 14 }); 15 obj.on('drop', function (e) 16 { 17 e.preventDefault(); 18 }); 19 20 $(document).on('dragenter', function (e) 21 { 22 e.stopPropagation(); 23 e.preventDefault(); 24 console.log("dragenter"); 25 }); 26 $(document).on('dragover', function (e) 27 { 28 e.stopPropagation(); 29 e.preventDefault(); 30 console.log("dragover"); 31 }); 32 $(document).on('drop', function (e) 33 { 34 e.stopPropagation(); 35 e.preventDefault(); 36 console.log("drop"); 37 }); 38 39}); 40////検索ボタンをクリックした処理 41$(document).on('click', '.search-btn', function (event) { 42 //送信データの準備 43 var postData = { 44 'sceneId': _scenarioSelected, 45 'elements': _elements 46 }; 47 48 //データの取得(検索処理) 49 $.ajax({ 50 headers: { 51 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 52 }, 53 type: 'post', 54 url: _url + 'ajax/searchResult', 55 dataType: 'json', 56 data: postData, 57 }).done(function (result, textStatus, jqXHR) { 58 //☆データテーブルの作成 59 drawDataTable(result); 60 61 }).fail(function (data, textStatus, xhr) { 62 63 }); 64}); 65function drawDataTable(result){ 66 //DataTableを生成する 67 _dataTable = scenarioTable.DataTable({ 68 "language": { 69 }, 70 select: { 71 style: 'single', 72 toggleable: false 73 }, 74 altEditor: true, 75 buttons: [ 76 { 77 } 78 ], 79 "data":result['aaData'], 80 "columns": _headers, 81 "columnDefs": [{ 82 searchable: false, 83 orderable: false, 84 // 85 className: 'index-col hidden_col dragdrop',//★class設定 86 targets: 0 87 88 },

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

documentにドラッグドロップ関連のイベントリスナを登録しなければよろしいのではないでしょうか。

※追記
この部分が余計です。

Javascript

1 $(document).on('dragenter', function (e) 2 { 3 e.stopPropagation(); 4 e.preventDefault(); 5 console.log("dragenter"); 6 }); 7 $(document).on('dragover', function (e) 8 { 9 e.stopPropagation(); 10 e.preventDefault(); 11 console.log("dragover"); 12 }); 13 $(document).on('drop', function (e) 14 { 15 e.stopPropagation(); 16 e.preventDefault(); 17 console.log("drop"); 18 });

参照されているサイトでは、$(".dragdrop")以外の部分にドラッグドロップがあった場合にドロップされたファイルを開くという動作を防ぐためにこの記述が入っています。
もしかしたら、$(".dragdrop")も$(document)も、どちらも「何もしない」という動作をしているために、ページ全体がドロップ受付をしていると誤認されているのではないでしょうか。
$(".dragdrop")と$(document)を明確に区別するために、それぞれ別の動作をさせて確認してみてはいかかでしょうか。

投稿2021/01/08 05:27

編集2021/01/08 08:09
AT_2nd

総合スコア266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lemonediscream

2021/01/08 05:42

ご回答ありがとうございます。 イベントリスナを登録しないとは以下であってますでしょうか? var obj = $(".dragdrop");~console.log("drop");まで削除して、 $('.dragdrop').on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); console.log("4"); console.log(e); }); $('.dragdrop').on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); console.log("5"); console.log(e); }); $('.dragdrop').on('drop', function (e) { e.stopPropagation(); e.preventDefault(); console.log("6"); console.log(e); }); 上記に変更したところ、ドラッグもきかなくなっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問