jQuery переключает следующие два элемента
Вопрос
У меня есть элемент выбора формы, который при выборе определенного значения переключает два других элемента на странице (пару dt / dd).
Событие запускается корректно, но я не могу переключить элементы - обратите внимание, что я использую селекторы классов, потому что количество этих "наборов" элементов на странице является переменным.Вот мой код:
$(".lender_id").change(function () {
if($(this).val()=='45')
{
$(this).next(".lender_other1").toggle();
$(this).next(".lender_other2").toggle();
}
});
lender_id - это мой класс select element, html-код выглядит следующим образом (как указано, этот набор элементов может появляться на странице несколько раз):
<dt>Lender</dt>
<dd><select name="lender_id[1]" class="lender_id">
<option value="1">Value</option>
<option value="45">Special Value</option>
</select></dd>
<dt class="lender_other1" style="display:none;">Lender Name</dt>
<dd class="lender_other2" style="display:none;">
<input type="text" name="lender_other[1]" value="" /></dd>
<dt>Lender</dt>
<dd><select name="lender_id[2]" class="lender_id">
<option value="1">Value</option>
<option value="45">Special Value</option>
</select></dd>
<dt class="lender_other1" style="display:none;">Lender Name</dt>
<dd class="lender_other2" style="display:none;">
<input type="text" name="lender_other[2]" value="" /></dd>
etc...
Решение
вот то, что вы хотите:
$(".lender_id").change(function() {
if ($(this).val() == '45') {
$(this).parent().nextAll(".lender_other1:first, .lender_other2:first").toggle();
};
});
Редактировать
Я объединил селекторы классов вместе, чтобы сделать его более эффективным.
Другие советы
next ()
не делает то, что вы думаете оно делает. Попробуйте $ (this) .parent ('dl'). Find ('. Lender_other1')
. Или, вы знаете, может быть, просто $ ('. Lender_other1')
.
.next () возвращает только следующее совпадение, поэтому я думаю, что вы должны использовать .nextAll ()
используйте метод среза (начало, конец) . это правильный путь, согласно видео Джона Резига.