2012-01-20 4 views
8

Firefoxのdivにファイルをドロップした後、ウェブページがこのファイルにリダイレクトされます。私はdropハンドラでjQueryのe.preventDefault()を使ってこの伝搬を止めようとしましたが失敗しました。`drop`イベントの後にリダイレクトを止めるには?

#testにファイルをドロップすると、ウェブページはリダイレクトされませんが、#test1にドロップすると、その理由がわかります。 の後に伝播を防ぐには、ハンドラを常にdragenterdragoverdragleaveおよびdropにバインドする必要がありますか?

更新:

私たちがしなければならないすべては、dragOverイベントをキャンセル で、私たちは、この要素にドロップすることができ、ブラウザを伝えるために:

私はhtml5doctor上のいくつかのヒントが見つかりました。しかし、IEの動作が異なるため、 はdragenterイベントに対して同じ処理を行う必要があります。

とMozilla claims

リスナーdragenterdragoverイベントが に使用されているためには、それは、ドラッグしたアイテムを ドロップすることができる場所で、有効なドロップターゲットを示しています。

しかし、私は、Firefox、#test作品や#test1this demoをテストするには、Mozillaがミスを犯したようだしない、とhtml5doctorは右です:Firefoxは唯一drop仕事をするためにdragoverを必要とします。

答えて

14

ondragoverイベントがondropイベントを発射できるようにGoogle Chromeのサファリでキャンセルする必要があります。

+0

ああ、1を発見しました。 'dragenterイベントとdragoverイベントのリスナーは、有効なドロップターゲットのhttps://developer.mozilla.org/En/DragDrop/Drag_Operations#Specifying_Drop_Targetsを示すために使用されます。しかし、私のデモは「ドラッグセンター」なしで動作します:http://jsfiddle.net/mKtn2/6/ – Rufus

+2

ありがとう!これはChromeでナットを運転していた –

0

onDragOverをキャンセルするだけでは十分ではないことに気付きましたが、onDragDropとonDragLeaveもキャンセルする必要がありました。以下は、私は、ユーザーが何をしているかの行動をロギングを示しています:

<script type="text/javascript"> 

    var handledragleave = function handleDragLeave(e) { 
      console.log("Floating away. Do code here when float away happens."); 
      return this.cancelDefaultBehavior(e); 
    } 

    var handledragdrop = function handleDrop(e) { 
      console.log("Dropping. Do code here when drop happens."); 
      return this.cancelDefaultBehavior(e); 
    } 

    var handledragover = function handleDragOver(e) { 
      console.log("Floating over. Do code here when float over happens."); 
      return this.cancelDefaultBehavior(e); 
    } 

    cancelDefaultBehavior(e) { 
      e.preventDefault(); 
      e.stopPropagation(); 
      return false; 
    } 

$('.your-element-being-dragged-to') 
    .on('DragLeave', handledragleave) 
    .on('DragDrop', handledragdrop) 
    .on('DragOver', handledragover); 

</script> 

をそしてあなたの要素...

<p class="your-element-being-dragged-to">Drag something here!</p>