概要
ファイルのドラッグアンドドロップイベントを処理するために要素にイベントをアタッチしたいのですが、このイベントはすべての子要素にもアタッチされているようです。例えば、
$('#dragtarget').on('dragenter', function() {
console.log('dragenter');
});
...要素の子である要素の上にファイルをドラッグする#dragtarget
と、コンソールは。を出力しますdragenter
。したがって、このイベントをdocument
またはに添付window
すると、ページ上の任意の要素にカーソルを合わせるとイベントが発生します。
dragleave
子要素を残す場合を除いて、同じことが起こります。
質問
なぜこうなった?このイベントを意図した要素のみに添付する方法はありますか?そうでない場合、すべての子要素からイベントを切り離す方法はありますか?
jsFiddle
これは、いじくり回すフィドルの例です:http: //jsfiddle.net/UnsungHero97/ePLV6/7/
ボックス上にファイルをドラッグすると境界線が実線に変わりますが、テキストにカーソルを合わせると破線に戻ります。
ボックス内のテキストにカーソルを合わせているかどうかに関係なく、ボックス上でファイルをドラッグするときに境界線を実線に変更したい
念のため、フィドルのコードを次に示します。
HTML
<div id="dragtarget">
<span>File over/out here</span>
<br/><br/>
<span>more text here</span>
</div>
JS
// I expect only the #dragtarget element to fire the 'dragenter' and 'dragleave' events,
// not the child elements
$('#dragtarget').on('dragenter', function() {
$(this).css({borderStyle: 'solid'});
event.stopPropagation();
event.preventDefault();
return false;
}).on('dragleave', function() {
$(this).css({borderStyle: 'dashed'});
event.stopPropagation();
event.preventDefault();
return false;
});