2009-07-10 14 views
1

私はreplaceWithとjQueryドラッグ可能なドロップ?

$('#title').replaceWith('ha'); 

はjQueryのドロップ可能なスクリプトで

drop: function(event, ui) {} 

エリア外に動作しますが、それは内部で動作しません理由を理解しようとしています。具体的には、私が行う場合

$(".droppable").droppable({ 
drop: function(event, ui) { 
    $('#title').replaceWith('ha'); 
    } 

私はRuntime Error (line 1102) data(...).options is null or not an objectを得る。また、ドロップ内に$('#title').append('ha');を挿入すると、それが動作します。 しかし、私は

$(".droppable").droppable({ /* */ }); 

外のどこか他の$('#title').replaceWith('ha');を置けばそれが動作しますか?

答えて

3

ID =「タイトル」を持つ要素も=「ドロップ可能な」

クラスを持っています私はそれがドロップイベントが発生する原因となる要素を削除しようとしている場合に、それ以上の要素が存在しない場合がある見ることができましたと一緒に作業し、あなたは 'オブジェクトではない'というエラーを得ることができます。私はこれを自分で試していないかどうかは分かりません。

多分あなたはダミークラスをオブジェクトにマークすることができます(jQueryのデータはSRPに適していますが、これはこの回答の範囲外です)、次にドロップ可能なドロップ関数の外にありますあなたは(

何かのような...

$(".droppable").droppable({ 
    drop: function(event, ui) { 
     // mark the element for replacement 
     $('#title').addClass('replaceThisElement'); 
    } 
}); 

// outside of the drop function 
$('#title .removeThisElement').replaceWith('ha'); 
+0

あなたは正しいです。ドロップイベントは、削除する要素がもうないことでトリガされました。 Firebugは問題を特定するのを助けました。 – Rio

7

私は答えが、ジョン・エリクソンの答えにコメントを本当に、その多くのとしてこれを掲示しています交換を行うことができます私はに評判ポイントを持っていませんコメントはまだありません)。 18ヶ月後にもIEのバグです。ちょうどsetTimeout()を提案することで、「ドロップ機能の外で何かを実行する方法」を詳しく説明したいと思います。

私はこの問題を、 setTimeout()に要素を削除します。スナップまたはリバージョンの設定によっては、ドラッグ可能なものを隠すことも考えてください。

$(".droppable").droppable({ 
    drop: function(event, ui) { 
     // do something interesting here... 

     // now get rid of the draggable 
     $(ui.draggable).hide();   
     setTimeout(function(){$(ui.draggable).remove();}, 1); 
    } 
}); 
+0

ありがとう、私の問題を修正しました!これはIE8の唯一の問題でした。 IE9ではすべてが正常に動作していました。 –

+0

ありがとう!私はIE8をサポートする必要はありませんが、悲しいかな、私たちのメインユーザはそれを使っています。 – dbinott

関連する問題