jQueryUI可排序刷新失败
jQueryUI Sortable Refresh Fail
我想为两个可排序列表编写jQuery/JavaScript代码,具有以下限制:
- List1只接受List2,反之亦然。
- 项目只能从顶部拖动。
-
物品只能添加到顶部。
我尝试了几个不同版本的jQuery和jQueryUI,但我似乎无法实现这一点。这是我目前的记录:
<ul class='sortList' id="list1">
<li class="ui-state-default">abc1</li>
<li class="ui-state-default">def1</li>
<li class="ui-state-default">ghi1</li>
<li class="ui-state-default">jkl1</li>
<li class="ui-state-default">mno1</li>
</ul>
<ul class='sortList' id="list2">
<li class="ui-state-default">abc2</li>
<li class="ui-state-default">def2</li>
<li class="ui-state-default">ghi2</li>
<li class="ui-state-default">jkl2</li>
<li class="ui-state-default">mno2</li>
</ul>
JavaScript: $(function() {
var blockSort = true;
$("#list1").sortable({
connectWith: "#list2",
items: "> li:first",
start: function(event, ui) {
ui.placeholder.height(ui.item.height());
},
receive: function(event, ui) {
blockSort = false;
$('#list1').find('li:eq(0)').before(ui.item);
},
stop: function(event, ui) {
if (blockSort) {
event.preventDefault();
}
blockSort = true;
}
}).disableSelection();
$("#list2").sortable({
connectWith: "#list1",
items: "> li:first",
start: function(event, ui) {
ui.placeholder.height(ui.item.height());
},
receive: function(event, ui) {
blockSort = false;
$('#list2').find('li:eq(0)').before(ui.item);
},
stop: function(event, ui) {
if (blockSort) {
event.preventDefault();
}
blockSort = true;
}
}).disableSelection();
});
CSS: .sortList { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background: #eee; padding: 5px; width: 150px;
}
.sortList li { display: inline-block; margin: 5px; padding: 5px; font-size: 1.2em; width: 120px;
}
.ui-sortable-placeholder {
border: 1px dotted black;
background: rgba(99,99,99,0.05);
visibility: visible !important;
}
.ui-sortable-placeholder * {
visibility: hidden;
}
JSFiddle例子
问题是,一旦一个列表项成为可排序的活动,当更多的项目被添加到顶部时,它不会被禁用。我认为这将自行发生,不再需要显式刷新。但我也试过刷新,也没有工作。
这应该如何正确实现?
这可能是一个bug。
但是作为一种解决方案,您可以销毁可排序的,并在接收事件中使用缓存选项重新初始化它,如下所示:
receive: function(event, ui) {
blockSort = false;
$('#list1').find('li:eq(0)').before(ui.item);
var options = $("#list1").sortable('option')
$("#list1").sortable('destroy').sortable(options);
},
JSfiddle
相关文章:
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- Jquery选择菜单选项在页面刷新时失败
- 登录失败时不刷新
- AngularJS:cookie 在浏览器刷新时失败
- 第一次加载时绘制到画布失败.刷新后就可以工作了
- JavaScript仅在Chrome中刷新后失败
- Ajax调用有时工作,有时工作和刷新,有时刷新和失败....
- Firefox失败-使用文档后.写入和更新位置.哈希导致页面刷新
- 在页面刷新时,单元测试在通过和失败之间交替进行
- Ruby on Rails在使用ajax刷新页面时失败
- 如何刷新jwt并重新发送失败的http请求
- AngularJS html5Mode刷新失败
- jQueryUI可排序刷新失败
- Javascript会间歇性地失败,但在页面刷新时可以正常工作
- 刷新令牌是如何工作的,以及上次失败的http请求是如何再次调用的,给出401.
- 表单提交第一次失败,并在刷新页面时工作
- jsTree 在第二次刷新时失败
- 尝试使用AJAX提交而不刷新,静默失败
- 提交失败后刷新jquery表单
- 浏览器检测使用javascript失败刷新