2011-07-29 103 views
5

如果您使用Dojo表单输入,并希望对他们的标签这样的:可点击道场标签

<label for="???">Email</label> 
<input 
    type="text" 
    name="email" 
    dojoAttachPoint="email" 
    dojoType="dijit.form.TextBox" 
/> 

标签是无法点击,因为没有办法知道输入的ID之前的方式它被呈现。

除了在dojo中为该元素生成一个id之外,是否存在解决方案?

UPDATE

它实际上更加困难比我想象的,因为在道场输入字段被渲染为

<div class="dijit dijitTextBox" id="widget_dijit_form_TextBox_0"> 
    <input class="dijitReset dijitInputField" value="Χ" type="text" tabindex="-1"> 
    ... 
</div> 

和底层的输入字段没有一个id

回答

1

你是否尝试给输入一个id?

<label for="myIdComesHere">Email</label> 
<input 
    id="myIdComesHere" 
    type="text" 
    name="email" 
    dojoAttachPoint="email" 
    dojoType="dijit.form.TextBox" 
/> 

如果我没有记错,这个ID既可以采用由dojo.byId(以获取れ又名输入标签)和dijit.byId(以获取dijit的小部件实例)

+1

此解决方案仅适用于简单情况。想象一下在模板中有一个带有这个标签和输入的小部件。现在,如果您想在同一页面上放置同一小部件​​的多个副本,那么如果使用ids,则会遇到麻烦。通常避免使用id并使用dojoAttachPoint来引用JS中元素的特定实例。基本上,似乎dijit.form.Label从库中缺少,可以使用dojoAttachPoint而不是id来附加,这意味着它可能是编写dojox.form.Label的时候了;) – Karolis

+0

嗯,“编写id dojo会产生”是不是那么糟糕:P – hugomg

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。

如果编程创建文本框,你可以做到以下几点:

var tb = new dijit.form.TextBox(), 
    label = dojo.create("label", {for: tb.id}); 
+0

...看到我对Kernel James的回答的评论... – hypno7oad

1

如果你不关心与IE浏览器的兼容性,您可以将标签内输入:

<label><input type=checkbox>hello</label> 
+0

对于复选框效果很好,但是对于文本输入呢? – Karolis

+0

精明的观察。让我们把它作为读者的练习吧? ''' –

+0

与OP相同的问题。这看起来像一个简单的选择。唯一的缺点是以这种方式设计某些视觉设计变得更难。在这些情况下,moonsspoon似乎有更好的方法。 +1虽然简单的用例解决方案 – hypno7oad