【发布时间】:2019-10-14 01:35:06
【问题描述】:
我有一个 jquery 自动完成功能,一旦选择了一个值,它就会从 ajax 调用中加载一个带有复选框的数据表。然后在提交表单时,我需要访问数据表变量以迭代每一行以获取选定的行,但数据表变量显示为未定义。
我的做法与 this 示例中的相同,唯一的区别是数据来自 Ajax 请求。
你能帮我理解为什么会这样吗?
$(document).ready(function() {
var campId;
var t_OmnitureCode;
// Campaign input autocomplete
$("#campaign").autocomplete({
source: function(request, response) {
$.ajax({
url: "promotion",
type: "GET",
data: {
term: request.term,
action: "searchCampaign"
},
dataType: "json",
success: function(data) {
if (!data.length) {
var result = [{
label: "no match found",
value: "-1"
}];
response(result);
} else {
response($.map(data, function(item) {
return {
label: item.name,
value: item.campaignId
}
}));
}
}
});
},
select: function(event, ui) {
event.preventDefault();
campId = ui.item.value;
if (campId != "-1") {
this.value = ui.item.label;
// This will apply datatables getting the content from an Ajax call
t_OmnitureCode = applyDataTableOmnitureCode(campId);
}
},
focus: function(event, ui) {
event.preventDefault();
this.value = ui.item.label;
}
});
// Handling form submission
$("#frm_promotion").on("submit", function(e) {
var form = this;
// Variable for datatable "t_OmnitureCode" is undefined below
var rows_selected = t_OmnitureCode.column(0).checkboxes.selected();
编辑:
刚刚意识到,即使在分配变量 (t_OmnitureCode = applyDataTableOmnitureCode(campId);) 时,它也是未定义的,不知道为什么。
这里是 applyDataTableOmnitureCode 代码:
function applyDataTableOmnitureCode(campId) {
$("#tbl_omnitureCode").DataTable({
destroy: true,
scrollX: true,
fixedColumns: {
leftColumns: 1
},
"ajax": {
"url": "promotion",
"type": "GET",
"data": {
action: "searchOmnitureCodesByCampaignId",
campaignId: campId
},
"dataSrc": ""
},
"columns": [
{ "data": "key" },
{ "data": "omnitureCode" },
{ "data": "urlAppName" },
{ "data": "language" },
{ "data": "channel" },
{ "data": "createDateTime", "defaultContent": "" },
{ "data": "updateDateTime", "defaultContent": "" }
],
"columnDefs": [
{ "targets": 0, "checkboxes": { "selectRow": true } }
],
"select": {
"style": "multi"
},
"order": [[1, "asc"]],
"fnInitComplete": function() {
$("#omnitureCodeSection").show();
}
});
};
【问题讨论】:
-
applyDataTableOmnitureCode不返回任何内容... -
@KevinB 你是绝对正确的,我没有看到大错误。谢谢你抓住那个。当之无愧的反对票。
-
@KevinB 请把它作为一个答案,这样我就可以给你信用
标签: javascript jquery ajax datatables