如何使facebox弹出窗口保持打开状态,并且提交后facebox内的内容会发生变化

我是jQuery总计n00b 。 在我的rails app中,这会发生什么:

我在主页上,点击此链接:

Sign up 

一个漂亮的facebox弹出窗口显示并呈现此视图和包含的窗体:

 # /app/views/invites/new  'registration_code', :action => 'create' }, :id => 'codeForm') do %>  

我叮叮当然提交,如果代码有效,用户将被带到另一个控制器的另一个页面:

 def create # some stuff redirect_to :controller => 'users', :action => 'type' end 

现在我想渲染那个页面INSIDE SAME弹出窗口包含表单,按下提交按钮但我没有IDEA如何做到这一点。 我尝试过FaceboxRender但是会发生这种情况:

原始版本:

 # /controllers/users_controller def type end 

如果我改变它就像没有发生任何事情:

 # /controllers/users_controller def type respond_to do |format| format.html format.js { render_to_facebox } end end 

如果我改变它(我知道错了,但我是一个n00b,所以没关系:-):

 # /controllers/users_controller def type respond_to do |format| format.html { render_to_facebox } format.js end end 

我得到了这个渲染:

 try { jQuery.facebox("my raw HTML from users/type.html.erb substituted here")'); throw e } 

有解决方案?

非常感谢!!


现在我从firebug控制台得到一个“Ajax not defined”错误。 这是什么意思?

你可以继续使用facebox_render或其中一个分叉,它会让一切变得更容易:)

关于你的问题,你需要的是facebox中的表单来发出一个AJAX请求,这样你就可以使用format.js来响应这个调用了。 因此,在这种情况下,您需要使用form_remote_tag来使用AJAX发布数据。

在控制器中,您将收到一个AJAX请求,您将使用respond_to.js处理它,然后您可以再次创建一个render_to_facebox。 现在,您将在facebox中看到您想要的内容。

在视图中:

 # /app/views/invites/new <% form_remote_tag({ :controller => 'registration_code', :action => 'create' }, :id => 'codeForm') do %> <%= text_field_tag :code %> 
<%= submit_tag 'Confirm' %> <% end %>

在控制器中:

 # /controllers/users_controller def type respond_to do |format| format.html format.js { render_to_facebox } end end 

我希望它有点帮助,ciao!