質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Q&A

解決済

1回答

2836閲覧

mousedownとmouseupを使ったDnDについて

true

総合スコア440

JavaScript

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

0グッド

0クリップ

投稿2015/06/10 04:16

押したときにその行の値を取得し、離したときに押した行の値及び離した行の値を表示するということです(最終的にはセル内容の入れ替えをやりたいのですがいまはその準備段階です)。

しかしながら現状、xxxを押し,yyy上で離しても何も起きません。その逆も同じです。どのようにすればよいかご存知の方、よろしくお願い致します。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>drag</title> <script> var val, row; function drag($event, $this) { // マウスダウン行の値を変数val,マウスダウン行の行数を変数rowに格納 if ($event.type == "mousedown") { val = $this.innerHTML; row = $this.parentNode.rowIndex; } else if ($event.type == "mouseup") { // マウスダウンの実績があり、かつ異なる行でのマウスアップ if (row && $this.parentNode.rowIndex != row) { // マウスダウン行の値とマウスアップ行の値を表示 alert(val+"|"+$this.innerHTML); // 初期化 val = ""; row = ""; } else { return; } } } </script> </head> <body> <table> <tr><td onmousedown="drag(event, this);" onmouseup="drag(event, this);" draggable="true">xxx</td></tr> <tr><td onmousedown="drag(event, this);" onmouseup="drag(event, this);" draggable="true">yyy</td></tr> </table> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず mousedown、upを使ってドラッグ&ドロップを実現しようとするのであれば、 draggable="true" がいりません。

そうすると、現状だと、yyyの行から、XXXの行で離すと期待した動きをするのではないでしょうか。
xxxからのドラッグが出来ないのは、以下の判定部分がおかしいからです。

// マウスダウンの実績があり、かつ異なる行でのマウスアップ
if (row && $this.parentNode.rowIndex != row) {

row が押されたかチェックするのであれば、rowちゃんと初期化した後にチェックする必要があると思います。
以下のように修正してみました。

lang

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<title>drag</title> 6<script> 7var val, row; 8val = row = ""; 9 10function drag($event, $this) { 11// マウスダウン行の値を変数val,マウスダウン行の行数を変数rowに格納 12 if ($event.type == "mousedown") { 13 val = $this.innerHTML; 14 row = $this.parentNode.rowIndex; 15 } else if ($event.type == "mouseup") { 16// マウスダウンの実績があり、かつ異なる行でのマウスアップ 17 if (row !== "" && $this.parentNode.rowIndex != row) { 18// マウスダウン行の値とマウスアップ行の値を表示 19 alert(val+"|"+$this.innerHTML); 20// 初期化 21 val = ""; 22 row = ""; 23 } else { 24 return; 25 } 26 } 27} 28</script> 29</head> 30<body> 31<table> 32<tr><td onmousedown="drag(event, this);" onmouseup="drag(event, this);">xxx</td></tr> 33<tr><td onmousedown="drag(event, this);" onmouseup="drag(event, this);" >yyy</td></tr> 34</table> 35</body> 36</html>

投稿2015/06/10 05:54

takutok

総合スコア392

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

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

true

2015/06/10 06:35

ありがとうございました。draggable="true"が邪魔していたとは見落としていました(最初html5の機能でやろうとしていたので残ったままに)。ただ今度はドラッグしているときのアニメーションがなくなってしまったのでいまそれを実現するやり方を検討中です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問