как может нажатая кнопка asp.net открыть диалоговое окно jQuery и затем возобновить работу по умолчанию при нажатии кнопки Да? - PullRequest
1 голос
/ 29 сентября 2011

У меня есть диалоговое окно 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');
     });

Так что я прекращаю обратную передачу с помощью protectDefault, открывается диалоговое окно с сообщением, но я не могу запустить удаление без жесткого кодирования кнопки удаления, что является неприятным. Могу ли я в любом случае задержать событие щелчка, пока отображается диалоговое окно, и вызывать warnDefault при отмене и возобновлении при да?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Вы можете изменить тип живого события на 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');
 });
0 голосов
/ 29 сентября 2011

У меня получилось, но решение мне пока не нравится.Я бы предпочел более чистое решение, где я могу зафиксировать событие по нажатию кнопки и каким-то образом передать его в мой диалог, если это возможно.Так что я держусь и надеюсь, что у кого-то есть лучший ответ.Мой код, который заставил его работать (на данный момент):

$("#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 и запустил событие click в обработчике кнопки Yes.

Мне интересно, что произойдет, если пользователь нажмет кнопку через клавиатуру, что является одной из причин этогомне не нравиться:)

Стремление к чему-то лучшему, но оно работает по крайней мере ...

0 голосов
/ 29 сентября 2011

Отправка формы 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
       }
   }
...