在dataTable ajax请求期间,永远不会初始化隐藏的表单控件

问题描述 投票:0回答:1

我有一个DataTable var table = $('#example').dataTable(),它应该在下拉列表中的值更改时填充。我想在下拉列表中选择一个条目,该操作将触发一个AJAX请求,将所选条目的val()作为查询的ID传递。

我还在表单上有一个select控件,它在设计时是空的,并由另一个AJAX查询填充。最后但并非最不重要的是,我有一个隐藏的控件,它在DataTable实际发布之前存储了ID:

<div>
  <select class="form-control" id="objs" style="display:none">
  </select>
</div>

<input class="form-control" type="hidden" id="oid" name="oid" value="0">

以下是我如何做其余的事情:

$('#objs').change(function() {
  $('input[name="oid"]').val(this.value);
  table.DataTable({
    ajax: {
      data: {oid: $('#oid').val()}
    }
  });
  //alert($('input[name="oid"]').val());
  table.DataTable().ajax.reload();
});

下拉列表onchange事件处理程序工作正常,并在警告框中显示对象的ID。但是,Chrome调试工具显示oid表单控件永远不会被初始化。因此,DataTable内部创建的表单在没有对象ID的情况下发布。这是它的样子:

Array
(
  [oid] => 
)

我究竟做错了什么?我怀疑可能存在一些可变范围问题,或者DataTable在触发oid时仅忽略ajax.reload()的当前值。

jquery datatables html-form
1个回答
1
投票

在你的代码中,data:的值将在$('#objs').change(function()初始化时给出,而不是在被调用时给出。

datadeclaration更改为函数然后它将工作:

table.DataTable({
    ajax: {
      data: function ( d ) {
        d.oid = $('#oid').val();
      }
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.