我使用 simple_form 来显示一个电子邮件字段:
= f.simple_fields_for :user do |f|
= f.input :email, wrapper: :append, pattern: false do
= f.input_field :email, type: "email"
不知何故,它总是设置输入字段的模式,但我想改用电子邮件输入字段的 HTML5 验证。
有没有办法防止 simpleform 设置模式?
我使用 simple_form 来显示一个电子邮件字段:
= f.simple_fields_for :user do |f|
= f.input :email, wrapper: :append, pattern: false do
= f.input_field :email, type: "email"
不知何故,它总是设置输入字段的模式,但我想改用电子邮件输入字段的 HTML5 验证。
有没有办法防止 simpleform 设置模式?
您可以猴子修补 SimpleForm:
module SimpleForm
module Components
module Pattern
def pattern
# Deactivated for good:
#input_html_options[:pattern] ||= pattern_source
nil
end
end
end
end
现在,模式将不再从验证中生成。您需要手动将模式添加到需要模式的每个输入。例子:
= f.input :name, pattern: "[a-zA-Z]+"
有同样的问题......找到了一种解决方法,但它有点hacky
添加
:pattern => ".*"
像这样到你的领域
<%= f.input_field :email, :autofocus => true, :pattern => ".*", :class => "span12", :placeholder => t('placeholder.email') %>
我宁愿在应用程序目录中的某个位置创建一个 string_input.rb 文件......可能在一个名为“inputs”的文件夹中,然后有这个代码
class StringInput < SimpleForm::Inputs::StringInput
def input
input_html_options[:class] = "input-xlarge #{input_html_options[:class]}"
unless string?
input_html_classes.unshift("string")
input_html_options[:type] ||= input_type if html5?
end
input_html_options[:pattern] = nil
add_size!
@builder.text_field(attribute_name, input_html_options)
end
end
这将对所有模式属性产生影响,因此无需显式放入。当然,如果您想指定输入类型是否为电子邮件,您也可以添加条件。
快乐编码:)