如何点击asp.net按钮打开jQuery对话框,然后在点击Yes时恢复默认值



我有一个jQuery对话框和一个asp.net按钮(删除)。当点击删除按钮时,我希望对话框打开一个确认窗口,说"您确定要删除此记录吗?"当用户单击yes时,我想恢复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停止回发,对话框打开并显示消息,但我不能在没有硬编码删除按钮的情况下删除,这是讨厌的。无论如何,我可以保持点击事件,而对话框显示和调用preventDefault取消和恢复上是吗?

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

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

编辑(基于注释)

另一种想法是,您可以坚持处理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');
 });

提交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
       }
   }

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

$("#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事件。

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

等待更好的东西,但它至少在运行…

相关内容

最新更新