Событие пользовательской кнопки диалога jQuery UI - PullRequest
1 голос
/ 05 ноября 2010

Я нашел возможным создать пользовательскую кнопку в диалоге jQuery UI, но как мне вызвать какое-либо действие при нажатии кнопки?Например, я создал кнопку «Создать».При нажатии я хочу вызвать запрос Ajax Post.

У меня также есть другая проблема.Страница, на которой создается диалоговое окно, является результатом запроса публикации формы с предыдущей страницы.Диалог имеет форму внутри, которая удаленно вставляет текст, введенный в текстовое поле.При успешном создании этой записи я хотел бы обновить страницу, когда диалоговое окно закрыто.

Проблема, с которой я столкнулся, заключается в том, что браузер выдает предупреждение с просьбой подтвердить обновление.Любой способ обойти это или лучшее решение?

$("#dialog").dialog({
            autoOpen: false,
            width: 600,
            height: 200,
            maxHeight: 200,
            modal: true,
            closeOnEscape: true,
            buttons: {
                "Close": function() {
                    $(this).dialog("close");
                },
                "Create": function() {

                }
            },
            beforeClose: function(event, ui) {
                alert('I\'m about to close');
            }
        });

        $("#opener").click(function() {
            $("#dialog").dialog("open");
            return false;
        });

Ответы [ 3 ]

0 голосов
/ 05 ноября 2010

Что касается второй части вашего вопроса, Rails избегает этой ситуации при обработке POST, отвечая перенаправлением 302 на другую страницу. Затем клиент выполняет GET для перенаправленной страницы, которую можно перезагрузить.

В общем случае вы должны использовать POST-операции только для действий, которые меняют состояние (что-то удаляет или модифицирует). Часто, когда вы используете POST для обработки параметров, вам лучше сериализовать параметры в URL-адресе запроса GET.

Например, посмотрите, как http://en.wikipedia.com обрабатывает форму поиска. Ввод "John Resig" в поле поиска приводит к GET-запросу на

http://en.wikipedia.org/w/index.php?title=Special%3ASearch&search=john+resig

Сервер отправляет обратно перенаправление 302 на

http://en.wikipedia.org/wiki/John_Resig

и вы можете перезагрузить эту страницу сколько угодно, не сталкиваясь с проблемой повторной отправки POST.

JQuery имеет метод serialize , который можно использовать для преобразования входных значений формы в параметры URL: http://api.jquery.com/serialize/

0 голосов
/ 07 ноября 2010

Кроме того, вам, возможно, вообще не понадобится пересылать страницу. Вы все еще можете установить значения в текстовых полях на вызывающей странице из своего диалогового кода, если это имеет смысл.

0 голосов
/ 05 ноября 2010

Вы можете попробовать это:

... 
buttons: {
      "Close": function() {
         $(this).dialog("close");
       },
       "Create": function() {
             //Initiate post ajax call
             $.post('someurl',{<postdata>},function(){
                   //handle post results here
             });               
       }
 }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...