Моя таблица находится в каждом цикле, и ее идентификатор установлен на id = "batchNo".
я хочу получить значение каждой строки select option выбранного значения.
я пытался использовать следующий код, но он возвращает выбранное значение строки 1.
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<table>
<tr>
<td>
<select id = "batchNo">
<option value = "341" selected>this is 341</option>
<option value = "53">this is 53</option>
</select>
</td>
<td><input type = "text" onfocusout = "return alert($('#batchNo').find(':selected').text())"></td>
</tr>
<tr>
<td>
<select id = "batchNo">
<option value = "341">this is 341</option>
<option value = "53" selected>this is 53</option>
</select>
</td>
<td><input type = "text" onfocusout = "return alert($('#batchNo').find(':selected').text())"></td>
</tr>
</table>при выходе из 2-й строки должно возвращаться this is 53 но выдает this is 341
Атрибут 'id' должен должен быть уникальным. Вместо этого используйте «класс».
использование класса не поможет этому коду @wanjas - первый элемент, полученный jquery, все равно будет первым выбором
@Яроманда X, конечно. это только первый шаг
есть ли такая возможность, как эта $(thisrow).find(tag"select")(':selected').text() это, например
this ... не thisrow ... this означает что-то в javascript, thisrow выдумано - неважно, только что понял, на какой элемент вы помещаете прослушиватель событий
Я не могу быть таким же. Вы можете использовать цикл for, чтобы установить уникальный идентификатор и получить значение из этих идентификаторов. Например: партия №1 и партия №2



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Прежде всего, использование одного и того же идентификатора для двух разных элементов является плохой практикой.
Способ 1 (с использованием имени класса)
<select class = 'batchNo'>
</select>
var result = document.querySelectorAll('.batchNo')
console.info(result) // prints list of all select
querySelectorAll() предоставит вам список значений, а затем вы можете перебрать его и получить значения всех выбранных элементов.
Способ 2 (с использованием идентификатора)
Как вы сказали, ваша таблица находится в цикле for, тогда вы можете получить номер итерации. цикла for и сгенерировать динамический идентификатор, как показано ниже.
<select id = "batchNo{{ for loop iteration no }}">
</select>
он будет генерировать идентификаторы, такие как партия №1, партия №2, партия №3 ....
Нужно найти «относительно» select. Вот что вы можете сделать:
$('input').on('blur', function() {
const selectVal = $(this).parents('tr').find('.batchNo').find(':selected').text();
console.info(selectVal);
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<table>
<tr>
<td>
<select class = "batchNo">
<option value = "341" selected>this is 341</option>
<option value = "53">this is 53</option>
</select>
</td>
<td><input type = "text"></td>
</tr>
<tr>
<td>
<select class = "batchNo">
<option value = "341">this is 341</option>
<option value = "53" selected>this is 53</option>
</select>
</td>
<td><input type = "text" /></td>
</tr>
</table>И, очевидно, чтобы избежать дублирования id, вам нужно изменить что-то другое, например class. (Вы также можете использовать атрибут data-*)
Mosh Feu, не могли бы вы проверить эту скрипку jsfiddle.net/5k6q92sd, так как я хочу, чтобы ее текст не был значением, значение приходит правильно индивидуально из вашего кода
Поскольку вы обновили вопрос, я думаю, что это отвечает на проблему, которую вам нужно решить. Я согласен с предыдущими ответами, но лучше сделать id уникальным на всей странице.
Я удалил ваш встроенный код и добавил класс .runOnFocusOut к входным данным, s
.focusout.closest("tr")#batchNo и дочерний параметр, выбранный с помощью option:select.text()Дайте мне знать, если это не то, на что вы надеялись
// Add focusout event via new class
$(".runOnFocusOut").focusout( function() {
// Travel up DOM tree
// Find selected options using option:select
// Print the text
console.info( $(this).closest("tr").find("#batchNo option:selected").text() );
});<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<table>
<tr>
<td>
<select id = "batchNo">
<option value = "341" selected>this is 341</option>
<option value = "53">this is 53</option>
</select>
</td>
<td><input type = "text" class = "runOnFocusOut"></td>
</tr>
<tr>
<td>
<select id = "batchNo">
<option value = "344">this is 344</option>
<option value = "56" selected>this is 56</option>
</select>
</td>
<td><input type = "text" class = "runOnFocusOut"></td>
</tr>
</table>
id в действительный HTML должен должен быть уникальным — так что ответ таков: вы не можете сделать это (надежно) — возможно, вместо этого используйте
$(this).find....?