如果您正在使用dojo表单输入并希望为它们添加标签:
<label for="???">Email</label>
<input
type="text"
name="email"
dojoAttachPoint="email"
dojoType="dijit.form.TextBox"
/>
标签不可点击,因为在呈现之前无法知道输入的ID。
除了为该元素生成dojo生成的id之外,是否存在解决方案呢?
更新
实际上比我想象的要困难得多,因为dojo中的输入字段被渲染为
<div class="dijit dijitTextBox" id="widget_dijit_form_TextBox_0">
<input class="dijitReset dijitInputField" value="Χ" type="text" tabindex="-1">
...
</div>
并且基础输入字段没有id
答案 0 :(得分:1)
您是否尝试过输入ID?
<label for="myIdComesHere">Email</label>
<input
id="myIdComesHere"
type="text"
name="email"
dojoAttachPoint="email"
dojoType="dijit.form.TextBox"
/>
如果我没记错的话,这个id可以被dojo.byId(用于获取domNode,也就是输入标签)和dijit.byId(用于获取dijit Widget实例)使用
答案 1 :(得分:1)
如果您在窗口小部件中创建表单,则可以使用this.id
来获取该窗口小部件实例的ID。
如果您的窗口小部件名为my.form
,则窗口小部件的ID将为my_form_0
,并且会为每个创建的新窗体窗口小部件增加。
要为表单元素创建唯一ID,请使用
var id = this.id + '_email';
'<label for="' + id + '"/>'
'<input type="text" id="' + id + '"/>'
那会给你
<label for="my_form_0_email"/>
<input type="text" id="my_form_0_email"/>
如果您使用dijit.form.TextBox创建输入,则该文本框将始终在您的页面上具有唯一ID。窗口小部件中的实际<input>
dom元素将具有通过获取窗口小部件的ID找到的ID。
如果以编程方式创建TextBox,则可以执行以下操作:
var tb = new dijit.form.TextBox(),
label = dojo.create("label", {for: tb.id});
答案 2 :(得分:1)
如果您不关心与IE的兼容性,可以将输入放在标签内:
<label><input type=checkbox>hello</label>
答案 3 :(得分:1)
正如Brian Mathews所说的,窍门是使用小部件的ID,但不必在javascript中进行操作,您可以在声明小部件模板时执行
<label for="${id}_email"/>
<input type="text" id="${id}_email"/>