由于每个页面上都有表单标记,因此无法访问 Web 应用程序项目
Web Application Project not accessible due to form tag on every page
我有一个遗留的 Web 应用程序项目 (WAP),我需要确保它可以访问。这种类型的项目有一个母版页 (Site.Master),每个页面(称为 Web 窗体)都继承自该页面以保持一致的外观。
新的母版页如下所示:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="First5Edmx.Site" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
您会看到正文包含一个表单标签,这意味着使用 Site.Master 作为模板的每个页面上都会有一个表单,无论它是否真的是一个表单。如果删除表单标签,项目将无法编译。
当我在我的网站上 运行 网络可访问性时,我在每个页面上都收到错误 "The page contains a form but there is no submit button"。这当然是正确的,但我如何使此代码可访问(无需使用更现代的技术重新创建整个项目)?
我不确定这是否仍会被编译器标记,或者引发错误的原因,但您可以使用 display:none 隐藏元素。这也会对辅助技术隐藏它,因此如果有工具将其标记为问题,隐藏它 可能 防止它被标记。
您也可以尝试 role="presentation",它基本上告诉辅助技术该元素仅用于视觉目的,不包含任何信息。这有点 hack,但值得一试。
<form style="display:none" id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
无论您是否可以让警告消失,请记住验证器和检查器只是为了提醒您注意潜在问题,但并非每条消息都不一定是真正的问题。
对于可访问性检查器尤其如此。他们在全球范围内做出了很好的假设,但有时无法区分错误和有点奇怪但出于某种原因需要的东西。
使用此类工具最重要的一点是,如果您收到无法修复的警告,t/don请准确了解其含义。
如果您可以接受其中的含义,那么您也可以接受警告。
要知道它到底意味着什么,最好的当然是进行手动测试。 无障碍工具永远无法取代手动测试。
回到您的具体情况,该工具在技术上当然是正确的:表单必须有一个提交按钮。
然而实际上,如果表单既没有任何字段也没有任何按钮,则不可能发送任何内容。因此,如果有的话,对您和用户来说只会有很少的烦恼。
不过,您仍然可以在没有真实形式的页面中尝试两件事:
- 按照其他答案中的建议将
role="presentation"
添加到 <form>
,这样屏幕 readers 就不会在没有任何内容可填写时向用户宣布表单
- 添加一个虚拟提交按钮,使用
display:none
禁用和隐藏,这样就没有人可以看到或单击它,如果您真的想让辅助功能检查器满意的话。请注意,它可能会给使用自定义或禁用 [=34=] 的用户带来麻烦。当然,当已经有一个真正的提交按钮时,不应该有任何额外的提交按钮。
想想第二项:你更喜欢什么?你的工具中的警告,或者一个小的 hacky 解决方案可能会给 1000000 个用户中的 1 个带来麻烦,如果你不小心留下了正常按钮和虚拟按钮,可能会出现一些错误的页面?
既然您知道可能的后果是什么,我个人认为不值得努力清除警告只是说您已经做到了,但请按照您的感受去做。
role=presentation 在不使用屏幕时没有副作用 reader,因此您完全可以放心使用它。
我有一个遗留的 Web 应用程序项目 (WAP),我需要确保它可以访问。这种类型的项目有一个母版页 (Site.Master),每个页面(称为 Web 窗体)都继承自该页面以保持一致的外观。
新的母版页如下所示:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="First5Edmx.Site" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
您会看到正文包含一个表单标签,这意味着使用 Site.Master 作为模板的每个页面上都会有一个表单,无论它是否真的是一个表单。如果删除表单标签,项目将无法编译。
当我在我的网站上 运行 网络可访问性时,我在每个页面上都收到错误 "The page contains a form but there is no submit button"。这当然是正确的,但我如何使此代码可访问(无需使用更现代的技术重新创建整个项目)?
我不确定这是否仍会被编译器标记,或者引发错误的原因,但您可以使用 display:none 隐藏元素。这也会对辅助技术隐藏它,因此如果有工具将其标记为问题,隐藏它 可能 防止它被标记。
您也可以尝试 role="presentation",它基本上告诉辅助技术该元素仅用于视觉目的,不包含任何信息。这有点 hack,但值得一试。
<form style="display:none" id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
无论您是否可以让警告消失,请记住验证器和检查器只是为了提醒您注意潜在问题,但并非每条消息都不一定是真正的问题。 对于可访问性检查器尤其如此。他们在全球范围内做出了很好的假设,但有时无法区分错误和有点奇怪但出于某种原因需要的东西。
使用此类工具最重要的一点是,如果您收到无法修复的警告,t/don请准确了解其含义。 如果您可以接受其中的含义,那么您也可以接受警告。 要知道它到底意味着什么,最好的当然是进行手动测试。 无障碍工具永远无法取代手动测试。
回到您的具体情况,该工具在技术上当然是正确的:表单必须有一个提交按钮。 然而实际上,如果表单既没有任何字段也没有任何按钮,则不可能发送任何内容。因此,如果有的话,对您和用户来说只会有很少的烦恼。
不过,您仍然可以在没有真实形式的页面中尝试两件事:
- 按照其他答案中的建议将
role="presentation"
添加到<form>
,这样屏幕 readers 就不会在没有任何内容可填写时向用户宣布表单 - 添加一个虚拟提交按钮,使用
display:none
禁用和隐藏,这样就没有人可以看到或单击它,如果您真的想让辅助功能检查器满意的话。请注意,它可能会给使用自定义或禁用 [=34=] 的用户带来麻烦。当然,当已经有一个真正的提交按钮时,不应该有任何额外的提交按钮。
想想第二项:你更喜欢什么?你的工具中的警告,或者一个小的 hacky 解决方案可能会给 1000000 个用户中的 1 个带来麻烦,如果你不小心留下了正常按钮和虚拟按钮,可能会出现一些错误的页面? 既然您知道可能的后果是什么,我个人认为不值得努力清除警告只是说您已经做到了,但请按照您的感受去做。
role=presentation 在不使用屏幕时没有副作用 reader,因此您完全可以放心使用它。