可以禁用/使项目在选择列表中不可见?

时间:2010-06-28 08:36:47

标签: jquery asp.net-mvc checkbox selectlist

是否可以在选择列表中禁用/不可见项目? 我想要完成的是,根据许多复选框,如果选中它们,则字段应显示在下拉列表中。但是,我确实有一个永远应该在下拉列表中的manditory字段,它应该都是在serten顺序。

复选框:

<table class="Fields"><tr>
    <td><%=Html.CheckBox("Field1", Model.DisplayField1, new { value = "Field1" })%> Field 1</td>
    <td><%=Html.CheckBox("Field2", Model.DisplayField2, new { value = "Field2" })%> Field 2</td>
    <td><%=Html.CheckBox("Field3", Model.DisplayField3, new { value = "Field3" })%> Field 3</td>
</tr><tr>
    <td><%=Html.CheckBox("Field4", Model.DisplayField4, new { value = "Field4" })%> Field 4</td>
    <td><%=Html.CheckBox("Field5", Model.DisplayField5, new { value = "Field5" })%> Field 5</td>
    <td><%=Html.CheckBox("Field6", Model.DisplayField6, new { value = "Field6" })%> Field 6</td>
</tr></table>

下拉:

<table cellpadding="0" cellspacing="0">
    <tr>
        <td>Sort 1</td>
        <td><%= Html.DropDownList("drpSortColumn1", (SelectList)ViewData["SortColumns"])%></td>
    </tr>
</table>

下拉列表包含所有复选框字段+一些额外字段,总是应该存在。因此,我可以动态删除所有并添加,具体取决于是否已选中。 我也需要在UI中执行此操作。理想上jquery不知何故。 那么approch对此有何益处?有禁用选项吗?什么会是一个选择?

谢谢!

// MRW

编辑: 我试着这样做:

$('#drpSortColumn1 option[value=' + val + ']').hide();

但这似乎没有成功。我不知道是否根本无法隐藏选项,或者我做错了。

3 个答案:

答案 0 :(得分:1)

变化:

$('#drpSortColumn1 option[value=' + val + ']').hide();
$('#drpSortColumn1 option[value=' + val + ']').show();

为:

$('#drpSortColumn1 option[value=' + val + ']').attr('disabled','disabled');
$('#drpSortColumn1 option[value=' + val + ']').attr('disabled','');

或:

$('#drpSortColumn1 option[value=' + val + ']').attr('disabled',true);
$('#drpSortColumn1 option[value=' + val + ']').attr('disabled',false);

答案 1 :(得分:0)

看看这里,我认为这就是你要找的东西:jQuery disable SELECT options based on Radio selected (Need support for all browsers)

你可以拥有自己的订单,只是做出正确的条件,我认为它应该统治;)

干杯^^

编辑:好的,在你的情况下它不是很方便,所以这里有一些线索:

  • 尝试使用下面的CuSS所描述的禁用属性,它将是最少的,并且难以设置。但它的主要缺点是该选项未被隐藏,即使它不再可选。显示:无选项仅适用于我记忆中的FF。

  • 如果您已准备好编写大量代码,可以通过影响它们来删除和添加字段,以便记住它们的顺序,例如

    ... ... 等...

你必须有两次相同的选择,一个在显示中:none div,“default”选择包含所有选项,我们不会操作。

然后,如果要隐藏选项,可以在第一个选择中将其删除。当你想把它放回去,并创建一个带有两个参数的函数插入选项:一个用于识别select(select1,select2,select3 ....不知道你是怎么做的),另一个用于行(s )你想插入(数组似乎是最好的)。

然后你在正确选择的正确位置克隆选中,它应该做的伎俩,至少这是我看到的唯一解决方案,如果你不想一直重新创建它,并保持正确的顺序。告诉我,如果不清楚,但我希望这有帮助;)

答案 2 :(得分:0)

我最终这样做了:

$(document).ready(function() {
    $('.Fields input[type=checkbox]:checked').click(function() {

        $('#drpSortColumn1').children().remove();

        jQuery.each(fields, function(val, name) {
            $('#drpSortColumn1').append('<option value="' + val + '">' + name + '</option>')
        });

        $('.Fields input:checkbox:not(:checked)').each(function() {
            $('#drpSortColumn1 option[value=' + $(this).val() + ']').remove();
        });
    })
});

所以我存储了一个包含所有原始字段的Json对象,并在每个复选框单击时,我从下拉列表中删除所有项目,并重新生成所有项目。然后我从下拉列表中删除值,具体取决于未选中的复选框。