dataTransfer
ドラッグ アンド ドロップ シーケンス中にjQuery オブジェクトをプロパティに渡そうとしています。プロパティをjQuert.event.props
配列に追加した後、それを割り当てることができますが、drop
イベント中に未定義を返します。ここで何が欠けているのかわからない-本当に簡単に思えます。
Javascript:
function dragClip(clip, event){
event.dataTransfer.el = clip;
/* Console confirms event.dataTransfer.el is the jQuery object */
}
function dropClip(target, event){
target.append(event.dataTransfer.el);
/* event.dataTransfer.el no longer has the object... where'd it go?? */
}
jQuery.event.props.push('dataTransfer');
$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){
dropClip($(this), event);
});
$('.clip').bind('dragstart', function(event){
dragClip($(this), event);
});
アップデート:
冗長性を削除するために書き直されました。そこには他のものが含まれていましたが、無名関数は問題なく動作します:
jQuery.event.props.push('dataTransfer');
$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){
$(this).append(event.dataTransfer.el);
});
$('.clip').bind('dragstart', function(event){
event.dataTransfer.el = $(this);
});
アップデート
@barneyの最終的な回答によると、私の最終的な作業コードです。元のイベントを使用してもオブジェクトをデータとして渡すことができないことに気付いたので、代わりに ID を適用し、ドロップ時に jQuery オブジェクトを再構築しました。また、宣言された関数を取り除くことですべてを引き締めました。より少ないコード、同じ結果。
$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){
$(this).append($('#' + event.originalEvent.dataTransfer.getData('clip')));
});
$('.clip')
.bind('dragstart', function(event){
event.originalEvent.dataTransfer.setData('clip', $(this).attr('id'));
});