Как установить динамического checkbox (jQuery-Сервер-БД)
Получаю данные с сервера (Java-SpringBoot)
в .ajax строю в цикле <td> и <input type="checkbox"> Как сделать чтоб в зависимости от ответа сервера (true/false) ставилась галочка или нет!
var csrfToken = $("meta[name='_csrf']").attr("content");
var csrfHeader = $("meta[name='_csrf_header']").attr("content");
$(document).ready(function () {
$('.selectView').click(function () {
var nameNotTrimmed = $(this).text();
var name = $.trim(nameNotTrimmed);
console.log(name);
if ($(this).closest('tr').hasClass('opened')) {
var trimName = name.replace(/\s+/g, '');
$('.' + trimName + '').closest('tr').each(function () {
$(this).remove();
});
$(this).closest('tr').find('i').removeClass('fa fa-minus-square-o').addClass('fa fa-plus-square-o');
$(this).closest('tr').removeClass('opened');
return;
}
$('tr .active').removeClass('active');
$(this).addClass('active').siblings().removeClass('active');
$(this).closest('tr').addClass('opened');
$(this).closest('tr').find('i').removeClass('fa fa-plus-square-o').addClass('fa fa-minus-square-o');
$.ajax({
type: "POST",
url: "/scale_of_size/getValues",
data: {scaleName: name},
beforeSend: function (xhr) {
xhr.setRequestHeader(csrfHeader, csrfToken);
},
success: function (data) {
for (var i = 0; i < data.length; i++) {
var trimName = name.replace(/\s+/g, '');
var tr = $('.active').closest('tr').index();
$('<tr class="shown ' + trimName + '">' +
'<td>' + data[i].nameSize + '</td>' +
'<td>' + data[i].kitchenSize + '</td>' +
'<td><input type="checkbox" class="sizeDef"></td>' +
'</tr>').insertAfter($('tr:eq(' + (tr + 1) + ')'));
//checkCheckbox(data);
$(".sizeDef").prop("checked", data[i].defaultSize);
}
},
error: function (e) {
alert("error")
}
});
});
});
function checkCheckbox(data) {
$(".size").prop("checked", data[i].defaultSize);
}
<thead>
<tr class=".info">
<th>Название</th>
<th>Название для кухни</th>
<th>По умолчанию</th>
</tr>
</thead>
<tbody id="records_table">
<tr th:each ="scale : ${scale}" >
<td th:inline="text" class="selectView"><i class="fa fa-plus-square-o" aria-hidden="true"></i>
[[${scale.nameScale}]]
</td>
<td></td>
<td></td>
<td>
<button class="btn btn-default values" data-toggle="modal" data-target="#values">Добавить значение шкалы</button>
</td>
</tr>
</tbody>
</table>
|
Цитата:
|
да, это boolean значение получаемое от сервера!
Цитата:
|
Если это действительно булево значение, то $(".sizeDef").prop("checked", data[i].defaultSize); и выполнит необходимое. Если этого не происходит, то значит, это не так, но в таком случае data не может быть объектом.
|
Цитата:
Проблема в том что когда я за хожу на страницу то везде unchecked Кликаю на второе поле и checked устанавливается во всех полях! Одним словом оно не учитывает данные сервера а реагирует на клик на $('tr .active') |
Запутался )
Если при получении страницы определить состояния, то выполните функцию checkCheckbox, причем тут data не понятно, вызова не видно ее в ajax запросе. |
Цитата:
url: "/scale_of_size/getValues", data: {scaleName: name}, Тут я его получаю и достаю поля обьекта success: function (data) поля обьекта data[i].nameSize - название размера String data[i].kitchenSize - название размера для кухни String data[i].defaultSize - размер по умолчанию boolean Из того что вернул сервак я засовываю в <td> |
Это у вас выполняется по ответу сервера:
//checkCheckbox(data); $(".sizeDef").prop("checked", data[i].defaultSize); и коли data[i].defaultSize булево значение, то указанный флажок примет соответствующее состояние. А те что при загрузке не устанавливаются "Проблема в том что когда я за хожу на страницу то везде unchecked", то выполняйте checkCheckbox(data), но откуда возьмется data? Либо сервер должен в атрибутах указать состояние флажков, либо объект с данными отдавайте клиенту, выполняя на нем checkCheckbox(data). |
Вложений: 1
1.Как вы можете видеть в цикле мы рисуем <td> (строчки в таблице)
<td>data[i].nameSize</td> <td>data[i].kitchenSize</td> <td>data[i].defaultSize</td> 2.на страницу выводит то что пришло с сервера -Имя -имя для кухни -true Делаю так <td>data[i].nameSize</td> <td>data[i].kitchenSize</td> <td><input type="checkbox" class="sizeDef"></td> checkCheckbox(data); и связываю функцией мой чек бокс function checkCheckbox(data) { $(".size").prop("checked", data[i].defaultSize); помещаю это в цикл Но не работает! сервер передает нормально true/false в зависимости от состояния в БД А Вот на странице не правильно Когда делаю как указано в пункте 1-2 норм выводит true/false но это не checkbox |
Можно и так
<input type="checkbox" class="sizeDef" '+(data[i].defaultSize ? 'checked' : '' )+'> а вот функцией, то в функцию нужно передавать текущий добавляемый флажок и его состояние. А у вас состояние data[i].defaultSize получат все флажки имеющиеся на странице. |
| Часовой пояс GMT +3, время: 19:09. |