Rails 3 + SimpleModal + AJAX:提交按钮只能工作一次

时间:2012-02-29 22:44:13

标签: jquery ajax ruby-on-rails-3 simplemodal

我在SimpleModal对话框中有一个Rails 3 AJAX表单,每次提交时都会向表中添加一行。我正在使用不引人注目的jquery-ujs方法。到目前为止:

  • 如果AJAX表单不在对话框中,则可以多次运行。

  • 如果它在SimpleModal对话框中,它只运行一次。之后,提交按钮停止工作。没有提交,没有错误,没有任何内容,虽然从js控制台手动提交时工作正常,即$('...')。submit();

当SimpleModal将html移动到对话框时,会删除类似事件处理程序的感觉,但jquery-ujs source中的所有内容看起来都像.delegate()方法,所以我不知道为什么它不会得到复位。

我怀疑这是一个非常简单的解决方案,我只是不知道解决了大约二十个字符的问题。

以下是相关代码:

Page js(app / assets / 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表单(app / views / binders / _form.js):

#add_binder_modal.container
  = form_for Binder.new, :remote=>true do |f| 
    = f.text_field :subject
    = f.submit

我认为你不需要它,但为了以防万一,这里是控制器(app / controllers / 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(app / views / binders / create.js.erb):

$('<%= escape_javascript(render(:partial => 'show', :locals=>{:binder=>@binder}))%>')
  .appendTo('.binders .atable tbody').hide().fadeIn();

2 个答案:

答案 0 :(得分:0)

快速尝试一种可能性(没有更全面地了解你正在做的事情):考虑是否需要使用.live(...)方法而不仅仅是.click(...)。或者更确切地说,.on()或.delegate()取决于您使用的jQuery版本。

http://api.jquery.com/live/

http://api.jquery.com/on/

http://api.jquery.com/delegate/

答案 1 :(得分:0)

我最终不得不深入挖掘一下simplemodal javascript源代码。没有灵丹妙药。这只是调试和追踪正在发生的事情的问题。