HTML 旁边的标签:可以用于表单错误消息吗?

Posted

技术标签:

【中文标题】HTML 旁边的标签:可以用于表单错误消息吗?【英文标题】:HTML aside tag: is it OK to use for form error message? 【发布时间】:2012-01-30 00:42:21 【问题描述】:

所以我有一个表单,我会有与每个输入/元素相关联的错误消息。 我想出了<aside> 标签的这种用法,并想知道人们的想法:

    <section class="fieldrow" id="rowJobTitle">

        <label for="txtJobTitle" id="lblJobTitle">
            <span>Job title:</span>
        </label>

        <input type="text" id="txtJobTitle" name="txtJobTitle">

        <aside id="errJobTitle" class="errormessage">
            <span role="alert">Please tell us your job title.</span>
        </aside>

    </section>

然后我将使用 CSS 来显示或隐藏 &lt;aside&gt; 错误,并用一点 JS 来改变这一点。

我知道我可以只使用跨度并完成它,但是跨度标签没有语义价值,我在&lt;aside&gt; 上阅读的所有(简短而模糊的)信息似乎都说没有问题有了这个,但我希望我能得到一些确认,或者以前尝试过这个并找到一个很好的理由不这样做的人。

谢谢,西。

【问题讨论】:

为什么不在输入标签中使用title属性呢?还是数据属性? 【参考方案1】:

所有主流浏览器都支持&lt;aside&gt; 标签。

但是,可能有更优雅的方法可以做到这一点,而&lt;aside&gt; 并不是特别符合您的意思。 From the html5 specs:

aside 元素代表页面的一部分,包括 与旁边的内容相切相关的内容 元素,并且可以被视为与该内容分开。 在印刷版式中,此类部分通常表示为侧边栏。

您的错误与内容并没有真正分开,因此这是一个相当不合适的选择。

你应该看看Twitter Bootstrap是如何处理内联表单错误的。

说了这么多,这是语义,因此本质上是主观的。如果它对您有意义并且有效,为什么不使用它呢?

编辑

阅读 Rob 的链接后,&lt;aside&gt; 看起来比我想象的更不合适。由于&lt;aside&gt; 不是&lt;input&gt; 的子元素,解析器没有理由认为它与&lt;input&gt; 相关。我会避免在这种情况下使用它。

MDN 为此提供了一些用例,而你的不适合:

它们通常包含诸如词汇表定义之类的侧面解释,更多 松散相关的东西,如广告、传记 作者,或在网络应用程序、个人资料信息或相关博客中 链接。

【讨论】:

规格可能已更改,因此我需要查看日期。查看我的答案和链接。 也不相信 Twitter Bootstrap 标记,但您的其余答案都很好。 +1 是的,不确定&lt;label&gt; 是否完全合理,但比&lt;aside&gt; 恕我直言。 谢谢,乔什...我刚刚更新了我的原始帖子以添加一些上下文。 有些文章似乎说&lt;aside&gt; 是相对于一篇文章或整个页面...其他人没有指定这一点,是否有任何地方说&lt;aside&gt; 不能与它是&lt;section&gt; 元素的父元素,W3C HTML5 规范说它应该与文档link 的主要文本流相关,所以我想这可能是一个不好的用途......你还有什么推荐的吗? Twitter Bootstrap 很好......但我想要一些更语义化的东西......使用 HTML 来布局页面与我想要实现的目标相反。 :)【参考方案2】:

IE 8 和更早版本不支持&lt;aside&gt; 元素。这意味着您在其上设置的任何样式都会在这些浏览器中丢失。您可以通过使用向他们“教授”元素的 javascript 代码来部分解决这个问题,但这一切都值得吗?预期收益究竟是多少?

从逻辑上讲,所描述的用途与 HTML5 语义不匹配。那里的描述很模糊,但我认为错误消息在显示和相关时不能被描述为切线;这才是真正的关键内容。它与其他内容没有分离;相反,它表达了关于它的重要信息。

广告可以是&lt;aside&gt; 的候选对象,轶事、历史记录或一般内容也可以是&lt;aside&gt; 的候选对象,这些内容不一定以任何方式但与主要内容有某种联系。

我没有看到任何证据表明任何软件(例如搜索引擎或浏览器或浏览器插件)实际上使用了&lt;aside&gt; 标记。只是猜测可能会做什么。

我认为整体设计存在根本缺陷,使得关于元素语义的问题更加理论化。当 CSS JavaScript 被禁用时会发生什么?是的,用户总是会看到错误消息,即使他根本没有输入输入或输入都是正确的。

假设这是关于在客户端代码中检测到的错误,更好的方法是将错误消息文本保留在 JavaScript 字符串中。当检测到错误时,添加新元素或修改现有元素内容,以提供错误消息;然后在纠正错误后将其清除。 (这里不需要依赖 CSS。)

这样,错误消息可以放在字段之前、右侧或下方。使用哪些元素并不重要(搜索引擎不会看到它,并且几乎不希望浏览器自己对它做任何特别的事情),但&lt;div&gt;&lt;strong&gt;...&lt;/strong&gt;&lt;/div&gt; 可能是一个不错的选择。

【讨论】:

好帖子,我现在必须同意,&lt;aside&gt; 不是使用正确的标签,我认为一个普通的旧 &lt;span&gt; 将不得不这样做。 // 回答这个问题:反正我使用的是 shiv,这并不麻烦,而且该应用程序将针对启用 JS 的 IE7+。唯一的收获是聪明、直观和正确地做事。 // 回答后续问题:我将使用服务器端通过 ajax 生成和提供错误以减轻页面加载,并为非 JS 提供后备。但这一切都抛在一边了(呵呵)。 :) 再次感谢。【参考方案3】:

由于它与文章相关,因此与上下文相关(最重要),这应该是可以接受的。我什至认为它是一个很好的使用旁白。 See this.

编辑: 经过所有讨论,我认为没有合适的语义元素来执行此操作,而最好的使用是通用 div 元素。我们正在努力强制使用 HTML5 元素。

【讨论】:

以上是关于HTML 旁边的标签:可以用于表单错误消息吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除所需属性的 HTML5 表单验证默认错误消息 [重复]

在 Grails 中,如何在字段旁边显示验证错误消息?

如何使用带有 Vue 的 HTML 5 验证添加错误消息

Django-website 程序案例系列-17 forms表单验证的字段解释

ExtJS4:如何在文本框、组合框等旁边显示验证错误消息

将标签放在输入表单旁边