2009-07-10 110 views
1

我試圖理解爲什麼replaceWith和jQuery可拖放放置?

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

drop: function(event, ui) {} 

區域外工作在jQuery的投擲的腳本,但它不會在裏面工作。具體來說,如果我做

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

我得到一個Runtime Error (line 1102) data(...).options is null or not an object。另外,如果我在drop中插入一個$('#title').append('ha');,它就可以工作。 但是,如果我把$('#title').replaceWith('ha');其他地方外

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

它的工作原理?

回答

3

是否元素與ID =「標題」也有類=「可放開」

我可以看到,如果它試圖刪除會導致發生drop事件的元素有可能會沒有更多的元素與你一起工作,你可能會得到一個「不是對象」的錯誤。我不知道自己沒有嘗試過。

也許你可以做的是用一些虛擬類標記對象(jQuery的數據會更適合並符合SRP,但這不在該答案的範圍內),然後在droppable的drop函數之外你可以做更換

像...

$(".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 2009-07-15 12:22:18

7

我張貼這是一個答案,但真正的多喬恩埃裏克森的回答評論的(我沒有信譽分評論)。 18個月後,這仍然是IE中的一個bug,我只是想詳細說明'如何在drop函數之外運行某些東西'部分,方法是建議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中一切正常。 – 2012-01-31 15:38:49