2017-06-07 3 views
0

jqueryのドラッグ可能な要素が削除されたときに予期しない動作が発生しました。 setTimeoutを設定しないと、残りの要素の数が間違っています。jqueryのドラッグ可能な要素が削除されたとき、私は間違ったカウントを取得するのはなぜですか?

なぜこの遅延が必要なのか誰かが私に説明できますか?

$("#mytable tr").draggable({ helper: "clone"}); 

$('#trash').droppable({ 
    tolerance: "pointer", 
    drop: function(event, ui) { 
     ui.draggable.remove(); 

     alert($('#mytable tr').length); 
     // --> this gives a wrong number of rows 

     //setTimeout(function(){alert($('#mytable tr').length);},0); 
     // --> this gives the right number despite the 0 delay 
    } 
}); 

http://jsfiddle.net/PBrockmann/ewgevoc5/

答えて

1

アラートでドラッグ可能な項目は、あなたがDOMツリーを検査した場合、あなたは新しい<tr>要素を子として作成されて見ることができます(マウスでドラッグしたときに作成されるクローンを数えます<table>要素の)。

setTimeout関数を呼び出すことによって、アラートが呼び出しスタックの最後に移動するため、アラートが呼び出される前にjQueryコードでクローンをクリーンアップすることができます。

+0

この説明に感謝します。私はより良い方法をすることはできますか? – PBrockmann

+1

ui.helper.remove()を呼び出すことができるはずです。 ui.draggable.remove();の下にあります。クローンも削除します。 –

+0

Thks。実際にはクローンを削除する必要があります。今はロジックで動作します。 – PBrockmann

関連する問題