У меня есть форма Rails 3 AJAX в диалоговом окне SimpleModal, которое добавляет строку в таблицу каждый раз, когда она отправляется. Я использую ненавязчивый подход jquery-ujs. До сих пор:Rails 3 + SimpleModal + AJAX: кнопка отправки работает только один раз
Форма AJAX работает любое количество раз, если она не находится в диалоговом окне.
Он работает ровно один раз, если он находится в диалоговом окне SimpleModal. После этого кнопка отправки перестает работать. Никаких сообщений, ошибок нет, ничего нет, хотя он отлично работает при отправке вручную из консоли js, то есть $ ('...'). Submit();
Ощущается как обработчик события упал, когда SimpleModal перемещает HTML в диалоговом окне, но все в jquery-ujs source выглядит как метод .delegate(), так что я не знаю, почему он не получит повторное подключение.
Я подозреваю, что есть очень простое решение, что-то, о чем я просто не знаю, решает проблему примерно в двадцать персонажей.
Вот соответствующий код:
Page JS (приложение/активы/JavaScripts/binders.js):
$(function() {
// Hide the form initially:
$('#add_binder_modal').hide();
// Show as SimpleModal when add link clicked:
$('#add_binder_link').click(function(event) {
event.preventDefault();
$('#add_binder_modal').modal();
});
// Close on success:
$("form").bind("ajax:success", function(xhr, data, status){
$.modal.close();
});
});
Вот мой Rails формы (приложение/просмотр/связующие/_form.js):
#add_binder_modal.container
= form_for Binder.new, :remote=>true do |f|
= f.text_field :subject
= f.submit
Я не думаю, что вам это нужно, но только в том случае, вот контроллер (приложение/контроллеры/binders_controller.rb):
class BindersController < ApplicationController
respond_to :html, :js
def create
@binder = Binder.new(params[:binder])
@binder.save
respond_to do |format|
format.html { redirect_to binders_path }
format.js
end
end
end
И, наконец, JS, что он реагирует с (приложение/просмотров/вяжущего/create.js.erb):
$('<%= escape_javascript(render(:partial => 'show', :locals=>{:binder=>@binder}))%>')
.appendTo('.binders .atable tbody').hide().fadeIn();
Спасибо. Я знаю, что это вопрос неясный. Не уверен, что это все сделает. Событие «click» находится по ссылке, которая открывает диалоговое окно, поэтому оно никуда не денется. Это кнопка В диалоговом окне, которая перемещается и не выполняется. – Ricky