2012-01-28 8 views
0

私はDnDの問題を以前に投稿しましたが、これは解決されましたが、テスト中に他のコードにエラーがあることがわかりました。
私はそれが完全に論理的であると確信しています、そして、私は論理的な説明が不足していますが、インターネット上で(まだ)DnDがほとんど触れられていない本では答えが見つかりません。
jQuery drappable draggable remove DnD複数の

問題は、1つ以上の(> 1)ドロップブルでターゲティングされたドロップブルの場合、その上でREMOVEを実行したときに以前にALLが返されるという問題です。あなたの自己のため

参照:http://jsfiddle.net/BCnyU/

次の手順に従います。 "ドロップ4" に
2 "3ドロップ") "ドラッグ1" に

1) "ドラッグ2"
3)「ドロップ5」に「ドラッグ4」
       私たちは特別なことはしません。
4)
5) "1ドロップ" をクリック上の "ドラッグ3"
6) "ドラッグ5" の "元に戻す" "1ドロップ" に "ドラッグ3"
7):
次にこれを行います

何が起こった「2ドロップ」の「ドラッグ3は、」我々は2つ(2)「1ドロップ」のイベントをドロップ持っていたということです。
「ドラッグ5」の「元に戻す」をクリックすると、「ドラッグ5」だけが返されると予想されることがあります。
しかし、いいえ...「ドラッグ5」と「ドラッグ3」が表示されます!

誰かが私にそれを説明して解決策を与えることができますか?

答えて

0

要素がドロップ領域にドラッグされるたびに、そのドロップ領域にクリックハンドラが追加されます。これらのクリックハンドラは、削除されることはありませんので、追加された新しいハンドラに加えて、ハンドラはその領域に残ります。要素を追加したり削除したりするほど、クリックハンドラが多くなります。

コードを変更せずにこれを修正する最も簡単な方法は、clickoneに変更することです。 oneでは、一度だけ実行されるハンドラをアタッチすることができます。

http://jsfiddle.net/BCnyU/101/

 .one("click",function(){ 
     $(ui.draggable).show(); 
     $(this).css("color","black"); 
     $(this).text(oldvalue); 
     $(this).droppable({disabled:false}); 
     $(this).removeClass('OK NOK'); 
     var numItems = $('.OK').length; 
     $('.counter').html('Correct: '+numItems +'/5'); 
     }); 

別のオプションは、アンカータグ、全体ではなく、ドロップエリアを「UNDO」をクリックハンドラを追加することです。次に、 "UNDO"アンカーが削除されると、ハンドラも削除されます。

+0

パーフェクト。技術的なフィードバックに感謝します。 私はこのコードを実装し、もう1つは "クリーン"なので、もう1つは動作させようとします。 「バインド」コマンドに飛び込まなければならないと思いますか? –