如何设置Dojo小部件的内部输入元素的ID?

时间:2013-07-24 14:27:56

标签: javascript widget dojo

Dojo将多个“普通”输入元素转换为更复杂的节点结构。例如,Dojo dijit/form/Select会生成由表而不是<select>元素组成的窗口小部件。 dojox.form.Uploader转换为id映射到span而不是<input id="myId" type="file"元素的内容。等等。

对于辅助功能,我需要将标签映射到输入窗口小部件,并且通过Wave运行我的网站会产生大量的红旗,因为标签for值与输入{{1}不匹配}。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以在大多数小部件上设置id属性,该小部件应放在您想要的内部<input>节点上。以look at this fiddle为例。如果打开TextBox小部件的HTML检查器,您将看到外部节点具有id“widget_ [my id]”和您传递给小部件的id的widgetid。深入研究外部div的内容,您将看到实际的<input>元素确实具有我传入的所需ID。

但是,似乎对于使用隐藏<input>来存储值的更复杂的小部件,您必须显式设置valueNode属性的ID。您可以看到示例in this fiddle

所以你可以像这样以编程方式创建你的小部件:

var select = new Select({
  ... widget properties
});
select.valueNode.id = "my_id"; // probably best to use dom-attr to set this.

如果您的窗口小部件是以声明方式创建的,那么您需要通过注册表,附加点或dijit#byId来访问它。