Как установить динамического 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, время: 02:25. |