#javascript #html #jquery #css #html-table
#javascript #HTML #jquery #css #html-таблица
Вопрос:
Это строка моей таблицы внутри tbody
моей таблицы. Я получаю выпадающее значение, текстовое значение, но не могу получить выбранное значение строки. Мое значение строки возвращает «undefined».
$(document).on("click", "#skorKartDegerle", function() {
$("#modal_evaluation").modal("show");
});
$(document).on("click", "#btnKaydet", function() {
var arrList = [];
var isEmptyAnswer = false;
$("#evaluationTable > tbody > tr").each(function() {
var line = $(this).find(".answerLine").val();
var ddlVal = $(this).find(".answerddl").val();
var txtVal = $(this).find(".answertxt").val();
var obj = '{"line":"' line '","ddlVal":"' ddlVal '","txtVal":"' txtVal '"}';
arrList.push(obj);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr class="answerLine" value="2">
<td>FR002</td>
<td>Koton Mağazacılık</td>
<td>1800</td>
<td>A</td>
<td>Kabul</td>
<td class="select" value="0">
<select class="answerddl">
<option value="1">Kabul</option>
<option value="2">Ret</option>
</select>
</td>
<td><input type="text" class="answertxt"></td>
</tr>
</tbody>
</table>
Комментарии:
1. Пожалуйста, создайте полный рабочий фрагмент с помощью инструментов
<>
2. покажите свой код jsp
Ответ №1:
Часть проблемы заключается в том, что tr
элементы не имеют value
атрибута. Чтобы сделать то, что вам требуется, вы могли data
бы вместо этого использовать атрибут для хранения пользовательских метаданных в элементе. Другая часть — это this
ссылка на tr
элемент. Затем вы вызываете find()
элемент, на который хотите настроить таргетинг, поэтому он не будет найден, поскольку этот метод ищет только потомков.
Кроме того, стоит отметить, что вы можете сделать логику более сжатой, используя map()
для построения массива вместо явного зацикливания, each()
а также, что было бы лучше хранить объекты в массиве и только кодировать их в формате JSON перед передачей через AJAX.
$(document).on("click", "#btnKaydet", function() {
var isEmptyAnswer = false;
let arrList = $("#evaluationTable > tbody > tr").map((i, tr) => {
let $tr = $(tr);
return {
line: $tr.data('value'),
ddlVal: $tr.find(".answerddl").val(),
txtVal: $tr.find(".answertxt").val()
}
}).get();
console.log(arrList);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="evaluationTable">
<tbody>
<tr class="answerLine" data-value="2">
<td>FR002</td>
<td>Koton Mağazacılık</td>
<td>1800</td>
<td>A</td>
<td>Kabul</td>
<td class="select" value="0">
<select class="answerddl">
<option value="1">Kabul</option>
<option value="2">Ret</option>
</select>
</td>
<td><input type="text" class="answertxt"></td>
</tr>
</tbody>
</table>
<button id="btnKaydet">Click me</button>
Комментарии:
1. Я изменился, как вы показываете, но я по-прежнему получаю строку как «неопределенную»
2. Сделайте его доступным для выполнения фрагментом или используйте jsfiddle.net
3. @FSDford и Рори, когда я использую фрагмент кода run под вашим кодом, вы видите, что строка все еще не определена.
4. Спасибо, это работает, но не работает в моей ide. Можете ли вы поделиться со мной ссылкой на чат? Если вы проверите мой код, было бы лучше
5. Пожалуйста, добавьте свой полный код к вопросу. Кроме того, проверьте консоль на наличие ошибок