Вопрос или проблема
Я пробовал это
Добавил Jquery
$(document).ready(function() {
$("select").change(function() {
$(this).find("option:selected").each(function() {
var optionValue = $(this).attr("value");
if (optionValue) {
$(".box").not("." + optionValue).hide();
$("." + optionValue).show();
} else {
$(".box").hide();
}
});
}).change();
});
У меня есть эти строки. Я меняю в первом выпадающем списке на Да/Нет, в зависимости от этого, если ‘Да’, значит, должен показываться блок ShowYesReason, а также ShowNoReason. Это работает, но не в этой конкретной строке… Он отображается во всех неуместных строках.
<tr>
<th id="remarkshead">Выберите замечания</th>
<th>
</th>
</tr>
<tr>
<td>
<select name="yesReason">
<option value="">Выберите</option>
<option value="Yes" id="yes">ДА</option>
<option value="No" id="no">НЕТ</option>
</select>
</td>
<td id="showYesReason" class="Yes Box">
<select name="yesreason">
<option value="022">Причина Да</option>
<option value="024">ДА</option>
</select>
</td>
<td id="showNoReason" class="No Box">
<select name="Noreason">
<option value="025">Причина Нет</option>
<option value="026">НЕТ</option>
</select>
</td>
</tr>
Я пытаюсь показать выпадающий список, основываясь на выборе другого выпадающего списка, только в конкретной строке. Но он отображается во всех строках.
Ответ или решение
Для решения вашей задачи нужно изменить ваш текущий код jQuery так, чтобы он работал только с конкретными строками таблицы, а не со всем документом. Это можно сделать, ограничив поиск элементов внутри контейнера, который вы хотите контролировать.
Вот исправленный код:
<table>
<tr>
<th id="remarkshead">Выберите замечания</th>
<th></th>
</tr>
<tr>
<td>
<select class="trigger-dropdown">
<option value="">Выберите</option>
<option value="Yes">ДА</option>
<option value="No">НЕТ</option>
</select>
</td>
<td class="Yes Box" style="display:none;">
<select name="yesreason">
<option value="022">Причина ДА</option>
<option value="024">ДА</option>
</select>
</td>
<td class="No Box" style="display:none;">
<select name="Noreason">
<option value="025">Причина НЕТ</option>
<option value="026">НЕТ</option>
</select>
</td>
</tr>
</table>
А вот и исправленный код jQuery:
$(document).ready(function() {
$("select.trigger-dropdown").change(function() {
// Получаем значение выбранного элемента
var optionValue = $(this).val();
// Находим родительский tr для текущего dropdown
var currentRow = $(this).closest('tr');
// Скрываем все дополнительные dropdown в текущей строке
currentRow.find(".Box").hide();
// Показываем соответствующий элемент в текущей строке
if (optionValue === "Yes") {
currentRow.find(".Yes").show();
} else if (optionValue === "No") {
currentRow.find(".No").show();
}
});
});
Объяснение кода:
-
HTML:
- Мы добавили класс
trigger-dropdown
к выбору "ДА"/"НЕТ", чтобы легко ссылаться на него в jQuery. - Элементы, которые должны отображаться в зависимости от выбора, имеют классы "Yes" и "No" и изначально скрыты с помощью стиля
display:none;
.
- Мы добавили класс
-
jQuery:
- Сначала мы получаем выбранное значение в
optionValue
. - Используя
closest('tr')
, мы находим текущую строку таблицы, в которой находится выпадающий список. - Скрываем все элементы с классом
.Box
в этой строке, чтобы избежать отображения ненужных элементов. - В зависимости от значения, которое было выбрано, мы отображаем соответствующий элемент.
- Сначала мы получаем выбранное значение в
Таким образом, при выборе "ДА" или "НЕТ" выпадающие списки с причинами будут показываться только в той строке таблицы, где происходит выбор.