【发布时间】:2011-01-04 00:15:52
【问题描述】:
我有两个 li 元素,它们是 jQuery 可拖动的。当我将框“一”拖放到框“二”上时,它们会被交换。到目前为止,一切都很好。 (延迟修复了here 中描述的另一个问题。)但是,即使在重置了它们的可拖动选项之后,这些元素现在也不能再拖动了。
任何想法如何解决这个问题? full working jsfiddle here
<html>
<head>
<script type="text/javascript" src="includes/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="includes/jquery-ui-1.8.2.custom.min.js"></script>
<script type="text/javascript">
jQuery.fn.swapWith = function(to) {
return this.each(function() {
var copy_to = $(to).clone(true);
var copy_from = $(this).clone(true);
$(to).replaceWith(copy_from);
$(this).replaceWith(copy_to);
});
};
$(document).ready(function() {
options = { revert: true};
$("li").draggable(options);
$('#wrapper').droppable({
drop: function(event, ui) {
window.setTimeout("Swap()", 600);
}
});
});
function Swap() {
$('#one').swapWith($('#two'));
//trying to fix problem where elements can't be dragged anymore
$("li").draggable("destroy");
$("li").draggable(options);
}
</script>
</head>
<body>
<form>
<ul id="wrapper">
<li id='one'>
<div style="width: 100px; height: 100px; border: 1px solid green">
one<br /></div>
</li>
<li id='two'>
<div style="width: 110px; height: 110px; border: 1px solid red">
two<br /></div>
</li>
</ul>
<br />
</form>
</body>
</html>
【问题讨论】:
-
对我来说,
.replaceWith()不像 clone 那样复制数据和事件。我不知道你最终想要做什么,但我想知道你是否可以只使用 sortable 而不是交换实际元素。像这样:jsfiddle.net/Ymhpt/2 -
.replaceWith 复制事件处理程序。为了测试,我将点击事件绑定到每个 li。交换后,点击仍然有效。我有几个 li 并且 Sortable 移动了一些,而我只想交换其中两个,同时保持其他不变。