我正在尝试使用deleteConfimation函数选项,但是我发现甚至在进入deleteConfimation函数之前都会弹出默认确认框-我缺少什么? 在下面的代码中,我可以设置断点,并使用新的defaultConfirmMessage监视正确设置的数据对象,但是基本的jtable默认删除确认框已经出现,而且我再也看不到更改过的框。
$(container).jtable({
title: tablename,
paging: true,
pageSize: 100,
sorting: true,
defaultSorting: sortvar + ' ASC',
selecting: false,
deleteConfirmation: function(data) {
var defaultMessage = 'This record will be deleted - along with all its assignments!<br>Are you sure?';
if(data.record.Item) { // deleting an item
// Check whether item is in any preset lists
var url = 'CampingTablesData.php?action=CheckPresets&Table=items';
$.when(
ReturnAjax(url, {'ID':data.record.ID}, MyError)
).done(
function(retdata, status) {
if(status=='success') {
if(retdata.PresetList) {
data.deleteConfirmMessage = 'Item is in the following lists: ' + retdata.PresetList + 'Do you still want to delete it?';
}
} else {
data.cancel = true;
data.cancelMessage = retdata.Message;
}
}
);
} else {
data.deleteConfirmMessage = defaultMessage;
}
},
messages: {
addNewRecord: 'Add new',
deleteText: deleteTxt
},
actions: {
listAction: function(postData, jtParams) {
<list action code>
},
createAction: function(postData) {
<create action code>
},
updateAction: 'CampingTablesData.php?action=update&Table=' + tablename,
deleteAction: 'CampingTablesData.php?action=delete&Table=' + tablename
},
fields: tableFields --- preset variable
});
=========== 经过进一步测试后,问题仅在删除项目时出现,并且它通过代码的$ .when()。done()部分。对删除网址的Ajax调用不会等待此操作完成-我该如何克服呢?
答案 0 :(得分:0)
我认为您无法将您的设计付诸实践。 ajax中的A代表什么?异步!出于各种良好的设计和性能原因,不赞成使用同步Ajax。
您需要将应用程序设计为异步运行。查看您的代码,感觉您在滥用deleteConfirmation事件。
请考虑更改默认的deleteConfirmation消息以通知用户,如果满足某些条件,则删除可能不会成功。说
messages: {
deleteConfirmation: "This record will be deleted - along with all its assignments, unless in a preset list. Do you wish to try to delete this record?"
},
然后在服务器上,检查预设列表,如果无法删除,则返回错误消息供jTable显示。
根据预设列表的动态程度,另一种方法可能是让列表功能返回一个附加标志或代码,以指示该项目已存在于哪些预设列表中(如果有),则确认功能可以检查该标志/指示器,而无需进一步访问服务器。
答案 1 :(得分:0)
感谢MisterP的观察和建议。我还考虑了他的最后一种方法,但最终将deleteConfirmation设置为false(以便不生成系统提示),然后编写了一个删除功能,该功能实际上并未删除,但返回了构造我自己的deleteConfimation消息所需的信息。然后执行一个简单的if Confirm(myMessage)并通过另一个Ajax调用删除。