jQuery jtable deleteConfirmation函数不起作用

时间:2018-07-17 20:07:01

标签: jquery-jtable

我正在尝试使用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调用不会等待此操作完成-我该如何克服呢?

2 个答案:

答案 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调用删除。