Логика установки флажка Jquery

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть сценарий, в котором я заполняю таблицу данных n количеством строк. Строки заполняются группами с определенным идентификатором группы. Скажем, если есть 20 строк, и они разделены на 4 группы, первые 5 строк будут иметь идентификатор группы = 1, а следующие 5 строк будут иметь идентификатор группы = 2 и так далее. При создании таблицы каждая строка будет иметь свой идентификатор группы, сохраненный в переменной.

Моя задача — установить флажки для всех строк в группе, но сделать доступной только первую строку определенной группы. Если пользователь устанавливает / снимает первый флажок определенной группы, все флажки этой конкретной группы будут установлены / сняты.

Я добиваюсь этого, объединяя счетчик с элементом id каждой строки, а затем выполняя цикл по всей таблице в каждой строке, сравнивая текущую строку с ее предыдущей строкой в идентификаторе группы. Если идентификатор группы текущей строки совпадает с предыдущей строкой, он получит состояние флажка предыдущей строки и установит текущий флажок в том же состоянии. Ничего не делается, если идентификатор группы текущей строки отличается от предыдущей строки.

Проблема здесь в том, что эта логика работает абсолютно нормально, но только один раз. Проверка / снятие всех флажков работает только после этого, он просто проверяет / снимает этот конкретный флажок, но не для всей группы.

При необходимости предоставит дополнительную информацию. Спасибо

 function checkBoxTick(){
for(var i = 0; i<$('#grouprowcount').val(); i  ){
    if(i != 0){
    var previd = $('#groupId' (i-1)).val();
    var nextid = $('#groupId' (i)).val();
    if(previd == nextid ){
        $("#numid" (i)).attr("checked", true);
        if($("#numid" (i-1)).is(":checked")){
            
        $("#numid" (i)).attr("checked", true);
        }
        else if($("#numid" (i-1)).is(":not(:checked)")){
            $("#numid" (i)).attr("checked", false);
            }
    }
    
    }   
}
 

Комментарии:

1. Просто глупый вопрос. Поскольку все флажки одной группы имеют общее состояние, почему бы просто не создать только один флажок для каждой группы?

2. Это совершенно правильный вопрос 🙂 Причина в том, что я использую плагин Datatables для своей таблицы, и количество столбцов должно совпадать с количеством строк. Таким образом, каждая строка в группе должна иметь флажок в этом столбце. Во-вторых, я сохраняю данные в группе, но по строкам. Данные сохраняются для строк, для которых установлен флажок. Поэтому я думаю, что лучше поставить флажок для каждой строки для сохранения данных.

3. Я понимаю. Если вы добавите разметку, подобную двум группам, и то, как вы запускаете функцию, я уверен, что кто-нибудь на это посмотрит. Исходя из этого, вы сокращаете все до одного правильного селектора.

4. Что значит добавить разметку? Я могу добавить gif-изображение проблемы, если это разрешено здесь. Функция вызывается при onclick флажка. Таким образом, он будет запускаться каждый раз, когда с любым флажком взаимодействуют.

5. добавьте также html-код.

Ответ №1:

Пожалуйста, проверьте, действительно ли это то, что вам нужно, в противном случае я предлагаю вам показать нам фрагмент вашего собственного кода.

 var groupCount = 2;

for(var i = 1; i <= groupCount; i  )
  $(':checkbox').filter('[name="group-' i '"]').not(':first').prop('disabled', true);

$(':checkbox').not(':disabled').change(function() {
  var group = $(this).attr('name');
  var checked = $(this).prop('checked');
  $(':checkbox').filter('[name="'  group  '"]').prop('checked', checked);
}); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<table>
  <tr><td><input type="checkbox" name="group-1" /></td></tr>
  <tr><td><input type="checkbox" name="group-1" /></td></tr>
  <tr><td><input type="checkbox" name="group-1" /></td></tr>
  <tr><td><input type="checkbox" name="group-2" /></td></tr>
  <tr><td><input type="checkbox" name="group-2" /></td></tr>
  <tr><td><input type="checkbox" name="group-2" /></td></tr>
</table>