2011-07-29 102 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