Rails button_to生成HTML无法通过W3C验证的解决问询
问题解答
生成的HTML是否合法?
不合法。根据W3C最新HTML规范,type="hidden"的<input>元素禁止设置autocomplete="on"或autocomplete="off",Rails 7.0.4的button_to生成的带该属性的hidden输入违反了这一规范,因此无法通过验证。
修复方案
方案1:前端JS临时移除属性
在页面中添加JS代码,加载完成后自动清除hidden输入的autocomplete属性:
document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('input[type="hidden"][autocomplete="off"]').forEach(el => el.removeAttribute('autocomplete')); });
方案2:自定义Helper覆盖生成逻辑
在app/helpers/application_helper.rb中添加自定义辅助方法,修改button_to的输出结果:
def fixed_button_to(name = nil, options = nil, html_options = nil, &block) original_html = button_to(name, options, html_options, &block) original_html.gsub(/autocomplete="off"/, '') end
之后在视图中用fixed_button_to替代原button_to:
<%= fixed_button_to "Add Entry", new_article_path, form_class: "inline_form button_to", method: :get, params: { a_token: "abc" } %>
方案3:升级Rails版本
Rails团队可能已针对该规范更新修复了button_to的生成逻辑,可检查7.0.x后续小版本或更高主版本的更新日志,升级到包含修复的版本以彻底解决问题。
内容的提问来源于stack exchange,提问作者Masa Sakano
相关产品推荐
相关产品推荐

