#jquery #select #option
#jquery #html-выберите
Вопрос:
Возможно ли в этом случае использовать JavaScript или jQuery
?
Когда значение поля выбора с классом cl_preAction
установлено в значение ‘003’ «Конец света», параметры в поле выбора «cl_prePRRS» 01,02,03 должны быть удалены или выделены серым цветом (выбрать невозможно — если это возможно).)
Обратите внимание, что этот шаблон будет повторяться несколько раз на странице, поэтому использование одного и того же идентификатора не сработает.
$('.cl_preAction').live('change', function (){
if ($(this).val() =='003'){
$(this).parent().parent()...
});
<tr>
<td>Action</td>
<td class='none'>
<div data-role='fieldcontain' class='none'>
<select name='ACTC' class='none cl_preAction' data-theme='a'>
<option data-location='S' value='001'>Fire</option>
<option data-location='T' value='002'>Flood</option>
<option data-location='T' value='003'>End Of World</option>
</select>
</div>
</td>
</tr>
<tr>
<td>Reason</td>
<td class='none'>
<div data-role='fieldcontain' class='none'>
<select name='PRRS' class='none cl_prePRRS' data-theme='a'>
<option value='01'>Rebuild</option>
<option value='02'>Relocate</option>
<option value='03'>Cash Payment</option>
<option value='04'>Send registered letter indicating this event is not covered</option>
</select>
</div>
</td>
</tr>
Комментарии:
1. здесь следует отметить одну вещь, если вы планируете использовать $ (this) несколько раз в одной и той же области, чтобы она ссылалась на один и тот же объект, было бы лучше назначить $ (this) локальной переменной. var me = $(this); а затем вместо этого используйте ‘me’.
Ответ №1:
Ваша первая проблема будет заключаться в том, что отключение параметров выбора не работает надежно во всех браузерах и версиях. Лучше всего удалить ненужные параметры, но вы также можете создать что-то, что заставляет пользователя выбирать другой вариант, когда это необходимо.
У вас также возникнет проблема с различными правилами для каждого из сочетаний полей выбора. Если только при выборе опции 3 в поле выбора «контроль» не будут всегда пропущены параметры 1,2,3 целевого поля выбора.
Я бы использовал атрибут ‘data’…
<select name='ACTC' class='none cl_preAction' data-theme='a' data-target-select="cl_prePRRS">
$('.cl_preAction').live('change', function (){
var me = $(this);
if (me.val() =='003') {
$("." me.attr("data-target-select")).filter(function() {
return ($(this).val() != '03'); // I think you really want 04 here.
}).remove();
}
});
Не идите по пути, пытаясь перепрыгнуть через DOM, если вам действительно не нужно. Это запутанно, и, не дай бог, вам когда-либо понадобится переместить поле выбора или изменить структуру страницы.
Вы заметите, что это решение удалит только те параметры, которые не = ’03’ в целевом поле выбора. Вы могли бы легко добавить еще один атрибут «данные», который позволит вам передать список опций, которые следует сохранить и / или удалить. Вы могли бы сделать это с помощью индекса опций, но это было бы немного менее гибко и сложнее для понимания.
Ответ №2:
Всегда ли связанные селекторы будут находиться в смежных элементах tr? Это не самый элегантный способ сделать это, поскольку он сильно зависит от вашей структуры (если вы добавите элемент tr между элементами, содержащими два селектора, это приведет к сбою)
$('.cl_preAction').live('change', function (){
if ($(this).val() =='003') {
$(this).closest('tr').next('tr').find('.cl_prePRRS option').filter(function() {
return (parseInt($(this).val(), 10) <= 3);
}).remove();
}
});
Это приведет к удалению опций из DOM.
Комментарии:
1. Мне нравится, что вы добавили отказ от ответственности к своему ответу, указав, что при изменении HTML это может вызвать проблемы.
2. Я не могу добавить комментарий к вашему ответу, поэтому я напишу его здесь — это хороший метод, но я думаю, что у него может быть несколько списков выбора с одним и тем же классом (я полагаю, он имеет в виду, что точно такой же фрагмент будет повторяться, поэтому он не может использовать идентификаторы?) Однако ему придется прояснить это самому. Если это так, метод данных не будет работать.
Ответ №3:
Я почти уверен, что отключение параметров будет работать только в IE 8 и выше. Тем не менее, есть несколько интересных вещей, которые вы можете попробовать, чтобы преодолеть это в более старых версиях.
Тем не менее, вот пример, который отвечает на вопрос так, как вы его задали 😉
По сути, он выполняет следующее
- ищет следующий
tr
тег - находит
select
элемент в этом узле - объявляет,
disabled="disabled"
еслиEnd of World
выбрано - если
End of World
не выбрано, используетсяremoveAttr()
для повторного включения значений
Комментарии:
1. Верно, я имел в виду, что это не работает в IE < 8; конечно, это работает во всем, но 😉