2013-01-24 39 views
-2

**任何专家都可以解释为什么使用$(“ #form> form“)在edit.js中,但不是$(”#form“)?

这里有一些相关的代码:**

内部控制器(应用程序/控制器/ entries_controller.rb)

def edit 
    @entry = Entry.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

内部应用程序/视图/条目/ edit.js.erb模板设定值入的形式,这里是代码:

$("#form > form").replaceWith("<%= escape_javascript(render(:partial => "form"))%>") 

索引页(APP /视图/条目/ index.html.erb)

<h2>Entry form</h2> 
<div id="form"> 
    <%= render :partial => "form" %> 
</div> 

形式局部(APP /视图/条目/ _form.html.erb)

<%= form_for(@entry, :remote => true) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :address %><br /> 
    <%= f.text_area :address, :rows => 3 %> 
    </div> 
    <div class="field"> 
    <%= f.label :phone %><br /> 
    <%= f.text_field :phone %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

回答

0

这不需要专家。 $("#form > form")表示form标记,它是DOM的子标记,其标记为id=form

你的形式,它是由生成<%= form_for(@entry, :remote => true) do |f| %><div id="form">

0

一个孩子的#form选择器选择与formid的元件 - 在这种情况下,一个<div>元件。

#form > form该选择器选择是这样的元件的与idform的直接子的形式的元素 - 在这种情况下,一个<form>直接在<div id="form">元件内部元件。

您想要替换表单本身,而不是包含它的<div>,因此您要选择<div id="form">元素内的表单。

0

$("#form")将匹配<div>id=form是对index.html.erb

$("#form > form")匹配这个<div id=form><form>标签2线。当您从<div>内部渲染您的部分内容时,<form>实际上是您在其中搜索的部分。