要更改新插入的項目,您應該使用sortable的接收事件。然而,截至今天,有在jQuery用戶界面(1.8.11)一個已知的限制/缺少的功能,使你不能很容易地從接收事件訪問克隆項目。現有的ui.item引用原始元素,而不是副本。
作爲解決方法,您可以在拖動開始時向原始項添加特殊類,以便可以在接收事件(在克隆插入DOM後觸發)搜索可排序項。在拖動結束時,您必須確保無論發生什麼,文檔中的任何元素都不應該設置特殊的類。如果你拷貝/克隆這是特別重要的,作爲排序的接收事件觸發可拖動的停止事件之前(這裏我們從原來的可拖動刪除特殊類)。
http://jsfiddle.net/3Gkrf/1/
HTML:
<ul>
<li id="test" class="dragme">Test</li>
</ul>
<ul class="sortme">
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
CSS:
.dragme { border:1px solid silver; width:50px; height:50px; }
.newitem { background-color:yellow; }
的javascript:
$(function(){
$(".sortme").sortable({
receive: function(){
$(this).find(".newitem").each(function(){
$(this).removeClass("newitem");
// Do your stuff with $(this), which is the newly created cloned item
});
}
});
$(".dragme").draggable({
connectToSortable: ".sortme",
helper: "clone",
start: function(){
$(this).addClass("newitem");
},
stop: function(){
$(this).removeClass("newitem");
}
});
});
如果你只是想手動創建另一個實例每當DRA gging停止,這可能是可拖動的停止事件。但是,我認爲在那裏沒有可靠的方法來檢測它是否落在可排序或其他地方。
stop: function(){
var clone = $(this).clone().appendTo("#wherever");
// do anything else with the clone variable here
}
您必須手動克隆您的對象,因爲即使您設置了助手來克隆它,助手也會在拖動停止時被銷燬。如果它在可排序的情況下丟失,則最終可能會得到兩個新對象,因爲排序會自動克隆接收。
恢復我想是下降的助手,但沒有使用.droppable – strawberry 2011-04-21 09:30:54
你只想把它放到排序您連接到,或任何用戶釋放鼠標按鍵? – DarthJDG 2011-04-21 09:43:38
@DarthJDG只對排序,我連 – strawberry 2011-04-21 09:48:19