我正在使用 jQuery UI Sortable 来实现分类选择,链接到一组单选按钮。这部分已经运行了几年。(见 jsFiddle 版本。)现在,客户想要修改它:现在应该只允许某些项目进入某些类别,我完全被卡住了。
在后端,禁用某些单选按钮很容易:
<ul id="L" class="L ui-sortable">
Available (A):
<li id='L_1'>
<input type='radio' name='L_1' id='L_1_A' value='A'>
<label for='L_1_A'>A</label>
<input type='radio' name='L_1' id='L_1_B' disabled='disabled' value='B'>
<label for='L_1_B'>B</label>
<input type='radio' name='L_1' id='L_1_C' value='C'>
<label for='L_1_C'>C</label>
Item 1 can't go in B
</li>
<li id='L_2'>
<input type='radio' name='L_2' id='L_2_A' value='A'>
<label for='L_2_A'>A</label>
<input type='radio' name='L_2' id='L_2_B' value='B'>
<label for='L_2_B'>B</label>
<input type='radio' name='L_2' id='L_2_C' disabled='disabled' value='C'>
<label for='L_2_C'>C</label>
Item 2 can't go in C
</li>
<!-- etc. -->
</ul>
<ul id='L_B' class='L ui-sortable cat'>Selected - B</ul>
<ul id='L_C' class='L ui-sortable cat'>Selected - C</ul>
(单选按钮通过 CSS 和 javascript 的组合隐藏。)这具有无法保存不正确分类的副作用:如果您尝试将某些内容放入它无法进入的类别中,您的选择将被完全忽略(因为禁用的单选按钮不返回值)。然而,除非你回去查看你保存的记录,否则你永远不会知道发生了什么:对你来说,看起来你像往常一样把物品放在盒子里。
我想要的是链接到禁用单选按钮的目标框在抓取项目时“变灰”,如果他们仍然尝试将其放入该框中,则该项目应跳回其起点。基本上,它的行为应该类似于设置 时发生的情况$("ul.notallowed").sortable("option","disabled",true);
,但仅在用户“持有”不允许的项目时。
我知道有一个.is(":disabled")
命令可以确定单选按钮是否被禁用,但我不知道把它放在哪里。
这是现有实现的javascript,即所有项目都允许所有类别。(我确信有更好/更有效的编码方式,但我很高兴它可以工作。)
$(function() {
$("#L").sortable({
connectWith: '.L',
containment: '#ListContainer',
receive: function(event, ui) {
$(ui.item).find('input:radio')[0].checked = true;
}
}).disableSelection();
$("#L_B").sortable({
connectWith: '.L',
containment: '#ListContainer',
receive: function(event, ui) {
$(ui.item).find('input:radio')[1].checked = true;
}
}).disableSelection();
$("#L_C").sortable({
connectWith: '.L',
containment: '#ListContainer',
receive: function(event, ui) {
$(ui.item).find('input:radio')[2].checked = true;
}
}).disableSelection();
});
$(document).ready(function() {
$('.B').closest('li').appendTo("#L_B");
$('.C').closest('li').appendTo("#L_C");
$('ul.ui-sortable').width("10em");
$('ul.ui-sortable li').css({cursor:'pointer'});
});
我应该注意到,我完全不擅长涉及花括号的编程语言。我写了上面的代码,但我无法告诉你它的大部分功能,更不用说它为什么起作用了。因此,如果您能以最简单的方式回答您的问题,我将不胜感激。