我正在研究Ruby 2和rails 4.我想添加html验证' required'在Rails的form_tag内。我的代码如下。
<%= form_tag file_download_contacts_path, :method => :post, :id => 'contact-form', :class => 'special' do |f| %>
<div><%= label_tag :Name %><br />
<%= text_field_tag "contact[name]" , nil, placeholder: "Your Name" %></div>
<div><%= label_tag :Email %><br />
<%= email_field_tag "contact[email]" , nil, placeholder: "your@mail.com" %></div>
<div><%= label_tag :Mobile %><br />
<%= telephone_field_tag "contact[phone]" , nil, placeholder: "Your Contact No" %></div>
<div><br /><%= button_tag 'Submit' %></div>
<% end %>
点击提交按钮,它直接转到file_download_contacts_path页面,虽然文本区域是空白的。我怎么能阻止这个?在Html中,我们可以使用&#39; required&#39;。如果有任何身体可以帮助我。谢谢。
答案 0 :(得分:0)
Rails在提交之前无法进行任何表单验证,因为验证需要在客户端进行(而rails当然是服务器端)。你需要使用javascript。如果你谷歌“javascript表单验证”,你会看到大量的信息。
jQuery是一个非常流行的javascript库,它有各种表单验证插件,谷歌和看看。
答案 1 :(得分:0)
这样的事可以帮到你
$(document).ready(function () {
$(“#contact-form”).validate({
debug: true,
rules: {
“contact[email]“: {required: true, email: true},
“contact[name]“: {required: true, name: true},
“contact[phone]“: {required: true, phone: true}
}
});
});
<强> Source 强>
答案 2 :(得分:0)
注意:上面的答案都是正确的,简单的解释,很完美,但以防万一,如果您想向用户显示实际错误消息,(想要复杂的验证),那么下面的答案适合您
在这种情况下,我的表单中有两个复选框,并且我想验证是否应该至少单击一个复选框,否则,我将向用户显示错误消息。
<%= form_tag( add_to_telegram_path, method: :post, id: 'add-to-telegram-form') do |t| %>
Select channel
<%= check_box_tag "channel_names[]", id: 'channel_1'%> Channel 1
<%= check_box_tag "channel_names[]", id: 'channel_2'%> Channel 2
<%= button_tag "Send", :class => 'btn btn-success', id: 'add-to-telegram-btn', onclick: "validTelegram()" %>
<%end%>
然后用JS
function validTelegram() {
event.preventDefault();
var checkboxes = Array.from(document.getElementsByName("channel_names[]"));
if(checkboxes.reduce((acc, curr) => acc || curr.checked, false)){
$('#add-to-telegram-form').submit();
} else {
//swal('Error','Please select atleast one channel!','warning');
alert('Some error!')
}
}
form_tag
的提交点击时调用了JS函数,(如果您使用的是sibmit_tag
,请用button_tag
替换它)注意:为显示错误消息,我使用了Sweet alert,您可以坚持使用alert();,但是如果您要寻找更好的UI,请在JS中取消注释我的swal()代码并注释出alert() ); 您可以阅读有关Sweet Alert PopUp
的更多信息