在事情的后端,禁用某些单选按钮很容易:
<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'});
});
我应该指出,我完全不擅长涉及花括号的编程语言。我写了上面的代码,但我几乎不知道它的大部分功能,更别提为什么它能工作了。所以如果你能用尽可能简单的术语来回答我的问题,我将不胜感激。