我有一个表单构建器帮助方法:
def check_box(attribute_name, *args)
@template.content_tag 'label', class: 'checkbox', for: "#{@object_name}_#{attribute_name}" do
super(attribute_name, *args) + @template.content_tag('i') +
@object.class.human_attribute_name(attribute_name)
end
end
这将生成嵌套HTML:
<label class="checkbox" for="application_setting_alert_on_click_link">
<input type="hidden" value="0" name="application_setting[alert_on_click_link]">
<input id="application_setting_alert_on_click_epay_link" type="checkbox" value="1" name="application_setting[alert_on_click_link]">
<i></i>
When customer visits link
</label>
但是通过W3C验证器,我们在标签内不能有2个输入,因此,我希望将隐藏的输入取出并放置在标签之外:
<input type="hidden" value="0" name="application_setting[alert_on_click_link]">
<label class="checkbox" for="application_setting_alert_on_click_link">
<input id="application_setting_alert_on_click_epay_link" type="checkbox" value="1" name="application_setting[alert_on_click_link]">
<i></i>
When customer visits link
</label>
任何帮助?
答案 0 :(得分:1)
使用这些check_box并不容易。您需要告诉rails不要包含隐藏字段并自行添加(未经测试):
def check_box(attribute_name, *args)
hidden_field attribute_name, value: 0, id: false
@template.content_tag 'label', class: 'checkbox', for: "#{@object_name}_#{attribute_name}" do
options = args.extract_options!
options[:include_hidden] = false
args << options
super(attribute_name, *args) + @template.content_tag('i') +
@object.class.human_attribute_name(attribute_name)
end
end