2014-07-21 29 views
0

我想要有一个Ajax形式,以验证是否用户名已被采取时,用户正在尝试注册。我怎样才能把阿贾克斯表单内的形式?

显然,常规的表格是由常规的表格组成的。
这里有普通的字段,例如Name,Username,Email和Password。

对于此用户名部分,我想添加按钮进行验证。

但是我不知道如果我和普通帖子分开来做它会怎么样。

它变成这样吗?

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 

    <%= f.text_field :username, :placeholder => 'username' %></div> 

    <%= form_for(current_user, :url => {:controller => "users", :action => "username_check" }, :remote => true) do |f| %> 
     <button type="submit" class="btn">Check if availavle</button> 
    <% end %> 

    <div class="username_check_message"> 
     <%= render :partial => "users/username_check_message" %> 
    </div> 

    <%= button_tag(:class => "btn btn-large btn-primary") do %> 
     Sign Up 
    <% end %>   

<% end %> 
+0

绑定顺便说一句,只要你知道,有另一种形式的内部形态没有有效的HTML。 – San

回答

1

可以应显示link代替的内部形式,只要绑定onclick事件的联系,在其中您可以创建Ajax功能的js。

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= f.text_field :username, :placeholder => 'username' %> 

    <a href="javascript:;" class="btn" id="chk">Check if available</a> 

    <div class="username_check_message"> 
    <%= render :partial => "users/username_check_message" %> 
    </div> 

    <%= button_tag(:class => "btn btn-large btn-primary") do %> 
    Sign Up 
    <% end %> 
<% end %> 

JS代码,点击事件

<script type="text/javascript"> 
    $('#chk').click(function() { 
     $.ajax({ 
      url: '/users/username_check', 
      type: 'get', 
      data: 'uname=' + $('#username').val(), // where 'username' is id of username text_field 
      dataType: 'json', 
      success: function(data) { 
       if(data.valid == 'true') { 
        $('.username_check_message').text('Valid'); 
       } else { 
        $('.username_check_message').text('Invalid'); 
       } 
      } 
     }); 
    }); 
</script> 
+0

谢谢,但是如何将参数的用户名传递给ajax? – MKK

+0

'data:'uname ='+ $('#username')。val()'它发送输入的用户名为'uname'。你可以在''params [:uname]'的行动中访问它' – RAJ

+0

非常感谢! – MKK

0

我想你试图提交一个使用ajax。你可以使用远程选项。

You can check this guide on how to use it.

+0

他已经在内部形式使用':remote => true',他想要被ajax化。这不是问题。问题是,当他点击外部表单中的任何按钮时,它将提交外部表单而不用等待内部表单的响应 – RAJ