Dojo 将几个“普通”输入元素转换为更复杂的节点结构。例如,Dojodijit/form/Select
会生成由表格而不是<select>
元素组成的小部件。dojox.form.Uploader
转换为 id 映射到 aspan
而不是<input id="myId" type="file"
元素的东西。等等等等
对于可访问性,我需要将标签映射到输入小部件,并且通过Wave运行我的网站会产生很多危险信号,因为标签for
值与输入不匹配id
。
解决这个问题的最佳方法是什么?
Dojo 将几个“普通”输入元素转换为更复杂的节点结构。例如,Dojodijit/form/Select
会生成由表格而不是<select>
元素组成的小部件。dojox.form.Uploader
转换为 id 映射到 aspan
而不是<input id="myId" type="file"
元素的东西。等等等等
对于可访问性,我需要将标签映射到输入小部件,并且通过Wave运行我的网站会产生很多危险信号,因为标签for
值与输入不匹配id
。
解决这个问题的最佳方法是什么?
您可以在大多数id
小部件上设置一个属性,该属性应放在您想要的内部节点上。以this fiddle为例。如果您打开 TextBox 小部件的 HTML 检查器,您将看到外部节点有一个“widget_[my id]”和一个您传递给小部件的 id。深入研究该外部 div 的内容,您会看到实际元素确实具有我传入的所需 id。<input>
id
widgetid
<input>
但是,对于使用隐藏<input>
来存储值的更复杂的小部件,您似乎必须显式设置属性的 id valueNode
。你可以在这个 fiddle中看到一个例子。
因此,您可以像这样以编程方式创建小部件:
var select = new Select({
... widget properties
});
select.valueNode.id = "my_id"; // probably best to use dom-attr to set this.
如果您的小部件是以声明方式创建的,那么您将需要通过注册表、附加点或 dijit#byId 来访问它。