Можно отключить / сделать элемент невидимым в списке выбора? - PullRequest
0 голосов
/ 28 июня 2010

Можно ли сделать элемент отключенным / невидимым в списке выбора?Я пытаюсь сделать так, чтобы, в зависимости от количества флажков, если они были выбраны, поля должны отображаться в раскрывающемся списке.Тем не менее, у меня есть обязательные поля, которые всегда должны быть в раскрывающемся списке, и все они должны быть в порядке следования.

Флажки:

<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>

DropDown:

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

Раскрывающийся список содержит все поля checkbox + количество дополнительных полей, которые всегда должны быть там.Поэтому я могу динамически удалить все и добавить в зависимости от того, отмечен он или нет.Мне нужно сделать это и в пользовательском интерфейсе.В идеале JQuery как-то.Так какой подход хорош для этого?Есть ли опция отключения?что в противном случае было бы вариантом?

Спасибо!

// MrW

Редактировать: я пытался сделать это:

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

но это нене получается.Я не знаю, если просто невозможно скрыть опцию, или я делаю это неправильно.

Ответы [ 3 ]

1 голос
/ 28 июня 2010

изменить:

$('#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);
0 голосов
/ 28 июня 2010

Я закончил этим:

$(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 со всеми оригинальными полями в нем, и при каждом щелчке флажка я удаляю все элементы из раскрывающегося списка и регенерирую все элементы. Затем я удаляю значения из выпадающего списка в зависимости от того, какие флажки не были отмечены.

0 голосов
/ 28 июня 2010

Посмотрите здесь, я думаю, это то, что вы ищете: jQuery отключить опции SELECT на основе выбранного радио (нужна поддержка всех браузеров)

Вы можете иметь свой собственный заказ, просто сделать правильные условия, и я думаю, что это должно править;)

Приветствия ^^

Edit: Хорошо, это не очень удобно в вашем случае, так что вот некоторые выводы:

  • попробуйте использовать отключенный атрибут, как описано в CuSS ниже, он будет наименее затратным и сложным для установки. Но у него есть главный недостаток, заключающийся в том, что этот параметр не скрыт, даже если он больше не выбирается. Дисплей: ни один для опций работает только в FF из того, что я помню.

  • Если вы готовы написать много кода, вы можете удалить и добавить поля, воздействуя на них идентификатором, чтобы запомнить их порядок, например,

    ... ... и т.д ...

У вас должно быть два одинаковых выбора, один на дисплее: нет div, выбор по умолчанию, содержащий все параметры, и которым мы не будем манипулировать.

Тогда, если вы хотите скрыть параметр, вы можете удалить его при первом выборе. Когда вы хотите вернуть его обратно и создать опцию вставки функции с двумя параметрами: один для идентификации выбора (select1, select2, select3 .... не знаю, как вы получили), а другой для строки (s) ) вы хотите вставить (массив кажется лучшим).

Затем вы клонируете выделенное в нужных местах в нужном выделении, и это должно сработать, по крайней мере, это единственное решение, которое я вижу, если вы не хотите воссоздавать его все время, и сохраняете правильный порядок , Подскажите, если неясно, но надеюсь, это поможет;)

...