【问题标题】:How to add checkboxes dynamically to the table in javascript如何在javascript中动态地将复选框添加到表格中
【发布时间】:2019-04-06 09:38:44
【问题描述】:

我在如何向 javascript 代码中动态添加复选框时遇到问题。我有不同的情况。我通过 ajax 获取数据所以我需要在 javascript 而不是 html 中添加 table 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;
      });
    }

  });

});

【问题讨论】:

    标签: javascript laravel checkbox


    【解决方案1】:

    问题在于 DOM 元素上的事件处理程序的执行。 浏览器从上到下渲染和执行代码(在大多数情况下)。 这意味着您在通过 Ajax 请求添加所有复选框之前执行$('#options').click()。 因此,您试图将事件处理程序附加到当时不存在的元素。 为了让它工作,你必须给父元素添加一个事件监听器

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

    来源: http://api.jquery.com/on/

    第二个参数是你要定位的选择器

    【讨论】:

    • 但是让我再澄清一件事。我也有类似在表中搜索的东西。但是现在我的表头在 javscrpit 中,所以它也不能工作。我能为此做些什么?如果你想看一些代码,请告诉我
    • 能否请您使用简短的代码示例和 jsbin / jsfiddle / codepen 演示为此打开一个新问题。我知道这不能回答您的具体问题,但如果您要增加更多复杂性,我会寻找一个已经完成这项工作的插件/库。如果这对您有用,请查看以下内容:DataTables:datatables.nettablesort:tristen.ca/tablesort/demoList.js:listjs.com/docs
    • 好的,我将为此提出一个新问题并进行解释,然后我会给你链接:)
    • 这是链接。请检查一下
    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多