【发布时间】:2013-05-26 18:44:09
【问题描述】:
jQuery Sortable() 运行良好,如果我尝试销毁和创建可排序对象,也运行良好。
但如果尝试$(document).unbind('mousemove') 并重新创建可排序的,它只能工作一次,然后永远不会工作。
我知道我可以更改代码;但我想知道为什么。
这是下面的代码,也在 jsfiddle (http://jsfiddle.net/webjjin/YJEf5/)
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<div id="container">
<ul id="sortable">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
</div>
<button id="btn">Destroy and create</button>
<button id="unbind">Unbind</button>
<script>$("#sortable").sortable();</script>
<script>
var html = $('#container').html();
$('#btn').click(function(){
$("#sortable").sortable('destroy');
$('#container').empty();
setTimeout(function(){
$('#container').append(html);
$("#sortable").sortable();
}, 500);
});
$('#unbind').click(function(){
jQuery(document).unbind('mousemove').unbind('mouseup');
})
</script>
【问题讨论】:
-
Sortable 需要跟踪鼠标位置,以便您拖动对象。与单击和文件输入框返回 false 相同,它们停止工作。如果你有一个跟踪鼠标的函数,你可以添加一个全局变量来启用/禁用你的函数。 IE。
window.notrack=true;,在您的函数中(在其最顶部):if (window.notrack) { return false; } -
仅供参考,从 jQuery 1.7 开始,.off() 方法优于 .unbind() 方法来删除元素上的事件处理程序。
-
@你为什么要删除所有的事件处理程序,你为什么不能只是disable可排序
-
我在 1 个答案的评论中回复。
-
为了测试,去jsfiddle.net/webjjin/YJEf5然后尝试排序(工作良好)-> 销毁按钮-> 排序(工作一次)-> 销毁并创建按钮(应该工作,但不是)
标签: jquery jquery-ui-sortable jquery-events unbind