按下提交按钮之后但在使用.ajax()进行POST之前的JQuery确认对话框

时间:2011-11-21 00:02:18

标签: javascript jquery jquery-ui

我有一个非常简单的场景,我想使用JQuery的ajax()方法发布表单,但在实际执行帖子之前请求用户做一些确认。

我有一个带有本地化按钮的JQuery UI对话框,以防您想知道下面按钮的所有代码是什么。

到目前为止,这是我的代码:

var i18n_deleteButtons = {};

i18n_deleteButtons[i18n.dialogs_continue] = function () {
    return true;
    $(this).dialog('close');
};

i18n_deleteButtons[i18n.dialogs_cancel] = function () {
    return false;
    $(this).dialog('close');
};

$('#delete-dialog').dialog({
    open: function () {
        $(this).parents('.ui-dialog-buttonpane button:eq(1)').focus();
    },
    autoOpen: false,
    width: 400,
    resizable: false,
    modal: true,
    buttons: i18n_deleteButtons
});

$("form#form_attachments").submit(function (event) {
    /* stop form from submitting normally */
    event.preventDefault();
    /* get some values from elements on the page: */
    var $form = $(this), url = $form.attr('action');

    // build array of IDs to delete (from checked rows)
    var jdata = { 'attachmentIdsToDelete': [] };
    $('input:checked').each(function () {
        jdata['attachmentIdsToDelete'].push($(this).val());
    })

    $.ajax({
        beforeSend: function (request) {
            // Return false if you don't want the form submit. 
            $('#delete-dialog').dialog('open');
        },
        url: url,
        type: "POST",
        dataType: "json",
        data: jdata,
        traditional: true,
        success: function (msg) {
            $('#msg').html(msg);
        }
    });
});

对话框实际打开正常,但点击任何按钮都不会发生任何事情。无论点击了哪个按钮,帖子都不会发生,对话框也不会关闭。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

为什么不在提交处理程序中移动实际的ajax调用并在删除对话框中按下按钮时触发它?

您可以在分离函数中存储ajax调用,并将此函数和url作为参数传递给确认例程。

 [pseudo code]

 function callAjax() {
     ...
 }
 function submitHandler() {
     confirmDialog({callback:callAjax,param:you_url});
 }
 function confirmDialog(obj) {
     $('#yes_btn').click(function() {
         // call the callback
         obj.callback(obj.param);
     });
     $('#no_btn').click(function() {
        // just close the dialog
     });
 }

这样,confirmDialog不必知道有关ajax调用的任何信息,只需在用户点击“确定”时使用给定参数执行回调。

答案 1 :(得分:0)

因为默认的jquery UI对话框对于常规使用来说有点麻烦,而且在一些自定义场景中配置有问题,所以我环顾四周并找到了这个基于jquery& jquery UI默认内容的Easy Confirm插件。它还允许非常简单的国际化。

https://github.com/wiggin/jQuery-Easy-Confirm-Dialog-plugin