繁体   English   中英

jQuery JTable DeleteConfirmation函数不起作用

[英]jquery jtable deleteConfirmation function not working

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

我认为您无法将您的设计付诸实践。 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显示。

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

感谢MisterP的观察和建议。 我还考虑了他的最后一种方法,但最终将deleteConfirmation设置为false(以便不生成系统提示),然后编写了一个删除功能,该功能实际上并未删除,但返回了构造我自己的deleteConfimation消息所需的信息。 然后执行一个简单的if Confirm(myMessage)并通过另一个Ajax调用删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM