我有一个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()
的当前值。
在你的代码中,data:
的值将在$('#objs').change(function()
初始化时给出,而不是在被调用时给出。
将data
declaration更改为函数然后它将工作:
table.DataTable({
ajax: {
data: function ( d ) {
d.oid = $('#oid').val();
}
}
});