我不确定我是否错过了一件非常简单的事情。通常,XPages 会维护"需要 aria"和"aria 无效"属性以进行验证。
但是,对于日期时间选取器(标准),它始终aria-invalid="false"
。
这是我在 Domino 9.0.1 中使用的一个简单的测试:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1" formName="TestForm"></xp:dominoDocument>
</xp:this.data>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="panel1">
</xp:eventHandler>
</xp:button>
<xp:panel id="panel1">
<xp:inputText id="inputText1" required="true">
<xp:dateTimeHelper id="dateTimeHelper1"></xp:dateTimeHelper>
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
</xp:inputText>
<xp:messages id="messages1"></xp:messages>
</xp:panel>
</xp:view>
单击按钮之前生成的 HTML 包含:
<input type="text" aria-haspopup="true" role="textbox" data-dojo-attach-point="textbox,focusNode" autocomplete="off" class="dijitReset dijitInputInner" aria-invalid="false" tabindex="0" aria-required="true" id="view:_id1:inputText1" value="">
单击后,我可以看到消息组件已聚合,但 aria 无效是假的。
<input type="text" aria-haspopup="true" role="textbox" data-dojo-attach-point="textbox,focusNode" autocomplete="off" class="dijitReset dijitInputInner" aria-invalid="false" tabindex="0" aria-required="true" id="view:_id1:inputText1" value="">
(我删除了包装输入的道场东西)
经过一番挖掘,我发现这个问题与XPages无关。
XPages 在验证失败时正确提供 aria-invalid
属性。但是,dojo 控件会在渲染期间自动更改它。因此,除非您在 Dojo 组件渲染代码中注入更正,否则这是不可能的。