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
сделал трюк. Надеюсь, что это может быть полезно для кого-то когда-нибудь.