可点击的道场标签

时间:2011-07-29 19:35:06

标签: javascript dojo

如果您正在使用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

4 个答案:

答案 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"/>