JQuery-UJS AJAX события не обрабатываются

Я пытаюсь реализовать регистрацию в ajaxy с помощью rails 3. Я использую jquery-ujs и удаленную форму. Я получаю доступ к форме регистрации с $.get запрос, и он отображается правильно. Эта форма регистрации удалена:

form_for @user, :remote => true, :html => {"data-type" => "html"} do |f|

В моем application.js, если запрос ajax для получения формы выполнен успешно, я пытаюсь связать обработчик для событий ajax из ненавязчивого javascript:

var load_remote_form = function(evt) {
    var href = $(this).attr('href'); 
    // load form template
    $.get(href, {}, function(data) {
        $('body').append(data);

        $('form[data-remote]').bind("ajax:beforeSend", function(e) {
            console.log("Caught beforeSend!");
        });
    });
    evt.preventDefault();
};

$(document).ready(function() {
    $('a#signup').click(load_remote_form);   
});

Инструменты разработки Chrome показывают, что событие "ajax:beforeSend"привязан, но никогда не обрабатывается (у меня ничего нет в консоли javascript при отправке формы, хотя в журнале rails я вижу, что запрос обрабатывается правильно, а ответ отправляется). Я могу связать другие события с тем же селектор (form[data-remote]), лайк clickи они обрабатываются правильно.

События Ajax, связанные через .live также не обрабатываются Но если форма отображается как часть макета (то есть она находится на отдельной странице, такой как http://localhost:3000/signup/), "привязана"ajax:beforeSend"обрабатывается правильно.

Мой контроллер (на всякий случай, он может быть плохо написан, но я уверен, что он работает):

class UsersController < ApplicationController

  layout :layout_for_type

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      session[:user_id] = @user.id
      flash[:notice] = "You have successfully registered."
      redirect_to root_url
    else
      if request.xhr?
        render :action => 'new', :status => :unprocessable_entry, :layout => false
      else
        render :action => 'new'
      end
    end
  end

  def layout_for_type
   request.xhr? ? nil : "application"
  end

end

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

1 ответ

Решение

Дурак я. Я полностью упустил еще один потенциальный источник проблем. я имел

javascript_include_tag :all

в моем макете приложения, и это вызвало в том числе и jquery.js а также jquery.min.js на мою страницу. Это оказалось причиной такого странного поведения. Удаление jquery.min.js сделал трюк. Надеюсь, что это может быть полезно для кого-то когда-нибудь.

Другие вопросы по тегам