如何点击一个asp.net按钮打开jQuery对话框,然后单击是时恢复默认值?

时间:2011-09-28 21:52:58

标签: jquery asp.net jquery-dialog

我有一个jQuery对话框和一个asp.net按钮(删除)。单击删除按钮时,我希望对话框打开一个确认窗口,上面写着“您确定要删除此记录吗?”。当用户单击是时,我想恢复asp.net回发。到目前为止,这是我的代码:

   $("#dialog-delete").dialog({
        autoOpen: false,
        height: 200,
        width: 400,
        modal: true,
        resizable: false,
        buttons: {
            'Cancel': function () {
                $(this).dialog('close');
            },
            'Yes': function () {
                $(this).dialog('close');
                //__doPostBack('ctl00$cp1$btnDelete','');
            }
        },
        open: function () {
            $(":button:contains('Yes')").addClass("red");
        }
    });
     $("[id*=btnDelete]").live('click', function (e) {
        e.preventDefault();
        $("#dialog-delete").dialog('open');
     });

所以我使用preventDefault停止回发对话框打开并显示消息,但是如果没有硬编码删除按钮,我就无法启动删除,这是令人讨厌的。无论如何我可以在对话框显示时按住click事件并在取消时调用preventDefault并在Yes上恢复?

3 个答案:

答案 0 :(得分:2)

您可以将实时事件类型更改为mouseup而不是单击,然后使用click事件触发回发。

$("[id*=btnDelete]").live('mouseup', function (e) { ...

...

$("[id*=btnDelete]").click();

修改(根据评论)

另一个想法是,您可以坚持处理点击事件的原始想法,并在确认删除后调用.die()函数删除之前附加的实时事件处理程序,使您可以调用.click()并导致回发。

您可以像这样调用.die()函数:

$("#dialog-delete").dialog({
    autoOpen: false,
    height: 200,
    width: 400,
    modal: true,
    resizable: false,
    buttons: {
        'Cancel': function () {
            $(this).dialog('close');
        },
        'Yes': function () {
            $(this).dialog('close');
            $("[id*=btnDelete]").die('click');
            $("[id*=btnDelete]").click();
        }
    },
    open: function () {
        $(":button:contains('Yes')").addClass("red");
    }
});

 $("[id*=btnDelete]").live('click', function (e) {
    e.preventDefault();
    $("#dialog-delete").dialog('open');
 });

答案 1 :(得分:0)

单击相应按钮时提交ASP.NET表单。

...
buttons: {
      'Cancel': function () {
           $(this).dialog('close');
       },
       'Yes': function () {
           $(this).dialog('close');
           $('#aspnetForm').submit();   // you may need to use a different selector based on your form name
       }
   }

答案 2 :(得分:0)

我有这个工作,但到目前为止我不喜欢这个解决方案。我更喜欢一个更清洁的解决方案,我可以通过按钮点击捕获事件,并以某种方式将其传递到我的对话框中,如果可能的话。所以我坚持并希望有人有更好的答案。让它运行的代码(现在)是:

$("#dialog-delete").dialog({
    autoOpen: false,
    height: 200,
    width: 400,
    modal: true,
    resizable: false,
    buttons: {
        'Cancel': function () {
            $(this).dialog('close');
        },
        'Yes': function () {
            $(this).dialog('close');
            $("[id*=btnDelete]")[0].click();
            //__doPostBack('ctl00$cp1$btnVoid','');
        }
    },
    open: function () {
        $(":button:contains('Yes')").addClass("red");
    }
});
 $("[id*=btnDelete]").live('mousedown', function (e) {
    e.preventDefault();
    $("#dialog-delete").dialog('open');
 });

基于@jdavies上面的帮助(以及我的评论来增强答案)。我将我的按钮处理程序更改为mousedown事件,并在Yes按钮处理程序中触发了click事件。

我想知道如果用户通过键盘触发按钮会发生什么,这是我感觉不舒服的部分原因。 :)

坚持做更好的事情,但它至少在运行......