0

是否可以在选择列表中使项目禁用/不可见?我想要完成的是,根据许多复选框,如果它们被选中,这些字段应该出现在下拉列表中。但是,我确实有一些必须始终位于下拉列表中的字段,并且它们都应该按顺序排列。

复选框:

<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 不知何故。那么什么方法对此有好处呢?有禁用选项吗?否则会有什么选择?

谢谢!

//MrW

编辑:我试图这样做:

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

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

4

3 回答 3

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);
于 2010-06-28T11:49:52.127 回答
0

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

您可以有自己的订单,只需制定正确的条件,我认为它应该规则;)

加油^^

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

  • 尝试使用下面 CuSS 描述的禁用属性,它将是成本最低且难以设置的。但它的主要缺点是该选项没有隐藏,即使它不再可选择。Display:none for options 仅在我记得的 FF 中有效。

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

    ... ... ETC...

您必须有两次相同的选择,一次在 display:none div 中,“默认”选择包含所有选项,我们不会操纵。

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

然后,您将所选内容克隆到正确选择的正确位置,它应该可以解决问题,至少这是我看到的唯一解决方案,如果您不想一直重新创建它,并保持正确的顺序。如果不清楚,请告诉我,但我希望这会有所帮助;)

于 2010-06-28T08:44:57.977 回答
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 对象,并在每次单击复选框时,从下拉列表中删除所有项目,然后重新生成所有项目。然后我根据未选中的复选框从下拉列表中删除值。

于 2010-06-28T13:35:48.470 回答