这是一个棘手的问题。
主要问题是sortable
和draggable
小部件一起工作使用元素的克隆而不是元素本身。
由于JQuerydata
方法存储元素的数据,由于上面描述的克隆创建行为,因此不容易带来信息。
一种解决方法可能是使用简单div
的方法在事件回调中存储和检索数据。它之所以有效,是因为始终只有一个元素被拖动。
这是代码和小提琴:http: //jsfiddle.net/ghMaP/4/
<ul id="draggable">
<li class="ui-state-default">Button</li>
<li class="ui-state-default">Text Field</li>
<li class="ui-state-default">Image</li>
</ul>
<ul id="sortable" class="ui-state-highlight">
</ul>
<!-- New div used to store and retrieve data of dragged element -->
<div id="tmp"></div>
</p>
$(document).ready(function() {
//Shortcut on the temp div
$tmp = $("#tmp").get(0);
$("#sortable").sortable({
start: function(event, ui) {
},
stop: function(event, ui) {
//Here, we retrieve data from the temp div
console.log("isNew : ", jQuery.data($tmp, "isNew"));
console.log("resultHTML : ", jQuery.data($tmp, "resultHTML"));
}
});
$("#draggable li").draggable({
connectToSortable: "#sortable",
start: function(event, ui) {
//Store info in a tmp div
jQuery.data($tmp, "isNew", true);
jQuery.data($tmp, "resultHTML", "<b>Here I will add some custom html to EVENT data</b>");
},
helper: function(event) {
return "<div class='custom-helper'>Custom helper for " + $(this).context.innerHTML + "</div>";
},
revert: "invalid"
});
});