簡體   English   中英

如何在客戶端完全驗證Rails form_for?

[英]How to validate Rails form_for is completely filled out on the client side?

我很難驗證在允許將表單提交到后端之前,我的Rails form_for中的所有表單字段都已完成。 在背面,模型檢查所有屬性的存在,但是在正面,我需要警告用戶是否尚未填寫字段。 形式如下:

<h1>List an item for sale</h1>
<%= form_for Product.new, :options => {:id => "new_listing"}, :url => {:action => "create"}, :html => {:multipart => true} do |f| %>
  <div><%= f.label :name %><br />
    <%= f.text_field :name, :id => "name_input", :autofocus => true, :placeholder => "Name yourself" %>
  </div>
  <div><%= f.label :price %><br />
    <%= f.number_field :decimal_price, :step => 'any', :placeholder => "Name your price" %>
  </div><br />
  <div><%= f.label :description %><br />
    <%= f.text_area :description, :cols => "50", :rows => "10", :placeholder => "Write a few sentences about the item you're listing. Is it in good condition? Are there any accessories included?" %>
  </div>
  <div>
    <%= f.label "Add a photo (increases your likelihood of selling)" %><br />
    <%= f.file_field :photo %>
  </div>
  <br />
  <div>
    <%= f.label "Category" %><br />
    <%= f.collection_select :category_id, Category.all, :id, :name, :prompt => 'Choose a category' %>
  </div><br />
  <%= f.submit "List!" %>
<% end %> 

我遇到的問題是弄清楚如何向表單發送錯誤的布爾值,以便它將阻止表單的發送。 每當我嘗試使用onSubmit或onclick動作時,它無論如何都會提交並忽略假布爾值。 有人可以告訴我如何檢查表單字段中的name_input,price和description來確保它們完成,如果沒有則拋出錯誤。

如果我正確理解您的信息,則應在jQuery提交處理程序函數中嘗試使用“ event.preventDefault()”:

 $( "#your-product-form-id" ).submit(function( event ) {
      if( your_validation_function() )
        return;
      else event.preventDefault();
    });

但是對於簡單的狀態檢查,我只將html'required'添加到這樣的輸入字段中:

<%= f.text_field :name, :id => "name_input", :required => true %>

怎么樣:required => true

<%= f.text_field :name, :id => "name_input", :autofocus => true, :placeholder => "Name yourself", required => true %>

您可以使用jQuery將聚焦或綁定綁定到每個字段。 從那里,您可以向Rails控制器發出AJAX請求,以提取您要驗證的值。

例:

$("#name-input").focusout(function(){
  $.ajax({
   type: "GET",
   dataType "JSON",
   url: "insert_path_here"
   success: function(data){
     **INSERT VALIDATION CODE HERE***
   }

 }
});

在輸入所有必需信息之前,禁用JavaScript中的“提交”按鈕即可。 只是以某種方式向用戶指示信息丟失,一旦輸入內容,就啟用按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM