【问题标题】:jquery jtable deleteConfirmation function not workingjquery jtable deleteConfirmation功能不起作用
【发布时间】:2018-12-25 15:07:25
【问题描述】:

我正在尝试使用 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() 部分。对删除 url 的 Ajax 调用不会等待这个完成 - 我该如何克服这个问题?

【问题讨论】:

    标签: jquery-jtable


    【解决方案1】:

    我不认为你可以让你的设计工作。 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显示。

    根据您的预设列表的动态程度,另一种方法可能是让列表函数返回一个附加标志或代码,指示该项目已在哪个预设列表中(如果有),然后您的确认函数可以检查此标志/指示器,无需进一步访问服务器。

    【讨论】:

      【解决方案2】:

      感谢 MisterP 的观察和建议。我还考虑了他的最后一种方法,但最终将 deleteConfirmation 设置为 false(以免生成系统提示),然后编写了一个实际上并未删除的删除函数,而是返回了构建我自己的 deleteConfirmation 消息所需的信息。然后一个简单的 if confirm(myMessage) 继续并通过另一个 Ajax 调用删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        相关资源
        最近更新 更多