首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable复选框未获得值

DataTable复选框未获得值
EN

Stack Overflow用户
提问于 2017-03-28 02:09:57
回答 1查看 2.8K关注 0票数 2

长话短说,所以我尝试使用"POST“来获取我的烧瓶模板中的复选框值。但是,我在模板中使用Datatable中的一些动态表(datatable-按钮)。这些Datatable导致我的post请求无法工作。(如果不使用datatable,如果它只是一个长的常规表,那么我的post请求就可以了)

将DataTable复选框值解析为POST请求的正确方法是什么?有人知道我的数据表定义有什么问题吗?

非常感谢!

在水瓶中:

代码语言:javascript
复制
def project():
   if request.method=="POST":
     selected_tags=request.form.getlist('table_records')

带有水瓶模板的HTML:

代码语言:javascript
复制
   <form action="" method="post">

   <button type="submit" name="Compare" value="Compare" class="btn-link">Compare</button>

   <table id="datatable-buttons" class="table table-striped table-bordered bulk_action">
     <thead>
          <tr>
            <th><input type="checkbox" id="check-all" class="flat"></th>
            <th>Tag</th>
            <th>Release date</th>
            <th>Number of Blocks</th>
          </tr>
     </thead>



{% for each_run in all_runs %}
          <tr>
             <td><input type="checkbox" class="flat" name="table_records[]" value="{{each_run.tag}}"></td>
             <td class=" "><a href= "{{url_for('skybolt_synthesis_tag',tag=each_run.tag)}}"> {{each_run.tag}}</a></td>
             <td>{{each_run.start_time}}</td>
             <td>{{block_count[each_run.tag]}}</td>
             </tr>
{% endfor %}
    </form>

DataTable组件

代码语言:javascript
复制
$(document).ready(function() {
    var handleDataTableButtons = function() {
      if ($("#datatable-buttons").length) {
        $("#datatable-buttons").DataTable({
          dom: "Bfrtip",
          buttons: [
            {
              extend: "copy",
              className: "btn-sm"
            },
            {
              extend: "csv",
              className: "btn-sm"
            },
            {
              extend: "excel",
              className: "btn-sm"
            },
            {
              extend: "pdfHtml5",
              className: "btn-sm"
            },
            {
              extend: "print",
              className: "btn-sm"
            },
          ],
          responsive: true
        });
      }
    };
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-28 13:03:09

原因

由于性能原因,jQuery DataTables从DOM中删除不可见行。提交表单时,只向服务器发送可见复选框的数据。

解决方案1.提交表格

在表单提交时,您需要将选中且在DOM中不存在的元素<input type="checkbox">转换为<input type="hidden">

代码语言:javascript
复制
var table = $('#example').DataTable({
   // ... skipped ...
});

$('form').on('submit', function(e){
   var $form = $(this);

   // Iterate over all checkboxes in the table
   table.$('input[type="checkbox"]').each(function(){
      // If checkbox doesn't exist in DOM
      if(!$.contains(document, this)){
         // If checkbox is checked
         if(this.checked){
            // Create a hidden element 
            $form.append(
               $('<input>')
                  .attr('type', 'hidden')
                  .attr('name', this.name)
                  .val(this.value)
            );
         }
      } 
   });          
});

解决方案2:通过Ajax发送数据

代码语言:javascript
复制
var table = $('#example').DataTable({
   // ... skipped ...
});

$('#btn-submit').on('click', function(e){
   e.preventDefault();

   $.ajax({
      url: '/path/to/your/script.php',
      data: table.$('input[type="checkbox"]').serialize();
   }).done(function(data){
      console.log('Response', data);
   });
});

链接

有关更多详细信息,请参阅jQuery DataTables:如何提交所有页面表单数据

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43059470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档