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