1

我有一个Rails应用程序,我运行rails g scaffold friends name。在我的朋友模型,我把这个:

class Friend < ActiveRecord::Base 
    validates_presence_of :name 
end 

,这是我的里面创建FriendsController行动:

def new 
    @friend = Friend.new 
    end 

... 

    def create 
    @friend = Friend.new(friend_params) 

    respond_to do |format| 
     if @friend.save 
     format.html { redirect_to @friend, notice: 'Friend was successfully created.' } 
     format.json { render :show, status: :created, location: @friend } 
     else 
     format.html { render :new } 
     format.json { render json: @friend.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

,这是我形式部分朋友们:

<%= form_for(@friend) do |f| %> 
    <% if @friend.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@friend.errors.count, "error") %> prohibited this friend from being saved:</h2> 

     <ul> 
     <% @friend.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

<script type="text/javascript"> 
    $(function(){ 
    console.log("Hello world!"); 
    }); 
</script> 

正如你所看到的,我在我的表单底部显示了jQuery $(document).ready(),当我加载表单时,它的日志为Hello world!

当我提交没有名称的表单时,它会再次渲染新模板,但不会调用该jQuery $(document).ready()

演示:

enter image description here

如何触发内jQuery的$(document).ready()再次呈现新的验证时(一个或多个)失败的部分?

为什么发生这种情况?

+0

你使用'turbolinks'概念吗? – Jenorish

回答

2

Rails4 turbolinks概念将默认出现。所以$(document).ready()将无法​​正确加载,你还是你可以按照下面的选项,

var ready; 
    ready = function() { 

     console.log("Hello world!"); 

     }; 

     $(document).ready(ready); 
     $(document).on('page:load', ready); 

或者

$(document).on('ready page:load', function() { 
    console.log("Hello world!"); 
}); 

或者

您可以使用jquery.turbolinks宝石来避免这个问题

或者

您可以使用其他turbolinksevents来解决问题。

希望它能解决您的问题。

相关问题