Как динамически добавлять флажки в таблицу в JavaScript - PullRequest
0 голосов
/ 06 апреля 2019

У меня проблема с тем, как динамически добавлять флажки в код JavaScript.У меня другой сценарий.Я получаю данные через ajax, поэтому мне нужно добавить таблицу thead в javascript, а не в HTML.Но теперь я хочу добавить флажки в мою thead.Действительно, я добавил их, но я не знаю, как проверить их все с помощью одного флажка.Я также пишу код для этого, чтобы выбрать все, но это работает только тогда, когда моя thead находится в HTML.Ниже приведен мой код, и он даст вам четкое представление.Попробуйте прочитать его в редакторе, потому что он более сложный:)

// Javascript

$(document).ready(function() {

  $(document).ready(function() {
    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
    });
  });

  $('select[name="class_id"]').on('change', function() {
    var classID = $(this).val();
    if (classID) {

      $.ajax({

        url: '/attendance/ajax/' + classID,
        type: "GET",
        dataType: "json",
        success: function(data) {

          var markup = '';
          markup += '<tr><th style="width: 2%" class="align-middle text-center"><input type="checkbox" id="options"></th><th style="width: 2%" class="align-middle text-center">#</th> <th style="width: 15%" class="text-center">Student ID<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Student Name<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Attendance<input type="text" class="form-control" disabled></th> <th style="width: 15%" class="text-center">Date<input type="text" class="form-control" disabled></th> <th style="width: 15%;" class="align-middle text-center">Actions</th> <tr>';

          $.each(data, function(key, value) {

            markup += '<tr> <td><input class="checkBoxes" type="checkbox" name="checkBoxArray[]"></td> <td><input type="hidden" value="' + value.id + '" name="id[]">' + value.id + '</td> <td><input type="hidden" value="' + value.student_id + '" name="student_id[]">' + value.student_id + '</td> <td><input type="hidden" value="' + value.first_name + '" name="first_name[]"><input type="hidden" value="' + value.last_name + '" name="last_name[]">' + value.first_name + ' ' + value.last_name + '<td><input type="hidden" value="' + value.attendance + '" name="attendance[]">' + value.attendance + '</td>' + '<td><input type="hidden" value="' + value.created_at + '" name="created_at[]">' + value.created_at + '</td>' + '<td style=" width=12%" class="text-center"> <a><button title="Edit" class="btn btn-outline-primary"><span class="fas fa-pencil-alt"></span></button></a> </td>' + '</td> <tr>';

          });
          $('table[id="studentsData"]').html(markup);
        }
      });
    }
  });
});

// Для выбора всех флажков

$(document).ready(function() {

  $('#options').click(function() {

    if (this.checked) {
      $('.checkBoxes').each(function() {
        this.checked = true;
      });
    } else {
      $('.checkBoxes').each(function() {
        this.checked = false;
      });
    }

  });

});

1 Ответ

1 голос
/ 06 апреля 2019

Проблема заключается в выполнении обработчиков событий для элементов DOM.Браузер отображает и выполняет код сверху вниз (в большинстве случаев).Это означает, что вы выполняете $('#options').click() перед тем, как добавить все флажки с помощью Ajax-запроса.Поэтому вы пытаетесь прикрепить обработчик событий к элементам, которых нет в данный момент времени.Чтобы это работало, вы должны добавить прослушиватель событий к родительскому элементу

$('table[id="studentsData"]').on('click', '#options', function() {})

Источник: http://api.jquery.com/on/

Второй аргумент - это селектор, на который вы собираетесь нацелиться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...