Диалоговое окно пользовательского интерфейса jQuery: отправка формы с помощью кнопки диалога

#jquery #ruby-on-rails-3 #jquery-ui-dialog #form-submit

#jquery #ruby-on-rails-3 #jquery-ui-dialog #форма-отправить

Вопрос:

В моем веб-приложении у меня есть список редактируемых объектов, каждый со ссылкой «редактировать». Теперь, когда вы нажимаете ссылку «редактировать», появляется диалоговое окно пользовательского интерфейса jQuery и отображается форма редактирования для этого объекта. Внизу находятся кнопки «сохранить» и «отмена». при нажатии кнопки «Сохранить» форма должна быть отправлена на сервер. Это то, что я не могу сделать.

Некоторые особенности заключаются в том, что форма редактирования загружается в div диалогового окна через ajax при нажатии кнопки «редактировать» на одном из элементов списка, так что, возможно, это как-то связано с этим. Вот несколько выдержек кода из приложения. Я работаю с Ruby on Rails 3.1.

Представление:

 <html>
...
<body>
    ...
    <div id="edit-campaign"></div>
    <script>
    $(function() {
    var buttons = { 
            "Save": function() { $("#edit-campaign-form").submit(); },
            "Cancel": function() { $("#edit-campaign").dialog("close"); }
              };
    createDynamicDialog("edit-campaign", buttons, "edit-campaign", "Edit Campaign");
    });
    </script>
</body>
</html>
 

Функция createDynamicDialog (в другом файле сценария): Это тот, в котором я заставляю каждую ссылку «редактировать» загружать свои формы редактирования (URL в атрибуте href) в диалоговые окна пользовательского интерфейса.

 createDynamicDialog = function(divId, buttons, cls, title) {
    $("."   cls).click(function(e) {
        e.preventDefault();
        var dialogOptions = {   
                                title: title,
                                width: 800,
                                height: 500,
                                modal: true,
                                autoOpen: true,
                                buttons: buttons
                            };
        var link = $(this);
        $("#"   divId).load(link.attr('href')).dialog(dialogOptions);
    });
}; 
 

При этом кнопка «Отмена» работает нормально (закрывает диалоговое окно), но форма не отправляется, когда я нажимаю «сохранить». Почему это может быть? У меня есть похожее диалоговое окно, которое загружается (часть ajax) при загрузке страницы и переключается только с помощью кнопки. Это работает нормально. Проблема возникает только тогда, когда загрузка формы выполняется по событию «щелчок». Почему?

Заранее спасибо за любую помощь, которую вы можете мне оказать. Я застрял на этом навсегда…

Ответ №1:

Вы могли бы попробовать изменить эту строку кода:

 "Save": function() { $("#edit-campaign-form").submit(); },
 

Для

 "Save": function() { $("#edit-campaign form").submit(); },
 

Я не могу сказать, как будет выглядеть сгенерированная форма, но изменение кнопки сохранения таким образом должно сработать. [Я подозреваю, что сгенерированная форма не имеет ожидаемого идентификатора]

обновить / редактировать

Чтобы отразить то, что мы рассмотрели в комментариях: когда события фиксируются не так, как ожидалось, важно проверить наличие других прослушивателей, которые могут использовать событие.

Комментарии:

1. Нет, не сработало: S. Сгенерированная форма действительно имеет этот идентификатор. Я вижу это здесь, в HTML-коде, когда нажимаю на одну из ссылок…

2. хм … сработало для меня: jsfiddle.net/8XtjV/1 Есть ли у вас что-нибудь похожее $('form').live('submit',function(){}) на привязку ко ВСЕМ вашим формам?

3. Нет, у меня нет никакой функции, прикрепленной ко всем формам. Странная вещь, которую я только что заметил, заключается в том, что событие запускается. Я добавил функцию console.log("submitted") «сохранить», и она появляется на консоли, но сервер не получает запроса.

4. Привет! Я нашел ошибку! Вы подаете мне правильную идею. По сути, код члена команды перехватывал отправку моей формы и делал с ней что-то еще, поэтому я запустил его функцию вместо отправки формы. Спасибо, что помогли мне!