2011-07-29 15 views
5

Jeśli używasz wejść formularza dojo i chcą mieć etykiety dla nich tak:Clickable dojo etykiet

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

etykieta nie jest klikalny, ponieważ nie ma możliwości dowiedzenia id przed wejściem to jest renderowane.

Czy istnieje inne rozwiązanie niż hakowanie identyfikatora, ponieważ dojo generuje ten element?

UPDATE

To właściwie jeszcze trudniejsze, niż myślałem, bo pole wprowadzania w dojo pobiera renderowane jako

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

i pola wprowadzania podstawowej nie posiada identyfikator

Odpowiedz

1

Czy próbowałeś podać id danych wejściowych?

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

Jeśli przypomnieć prawidłowo, identyfikator może być stosowany zarówno dojo.byId (w celu pobrania DOMNode aka słowa wejściowego) i dijit.byId (w celu pobrania dijit wystąpienie widget)

+1

To rozwiązanie działa tylko w prostych przypadkach. Wyobraź sobie, że masz widżet z tą etykietą i dane wejściowe w szablonie. Teraz, jeśli chcesz umieścić kilka kopii tego samego widżetu na tej samej stronie, będziesz mieć kłopoty, jeśli użyjesz identyfikatorów. Zasadniczo unika się używania id i używania dojoAttachPoint zamiast odwoływania się do tej konkretnej instancji elementu z JS. Zasadniczo wygląda na to, że w bibliotece brakuje biblioteki dijit.form.Label, która mogłaby zostać dołączona za pomocą dojoAttachPoint zamiast id, co oznacza, że ​​prawdopodobnie nadszedł czas napisania dojox.form.Label;) – Karolis

+0

"Hackowanie w id dojo generuje" nie jest tak źle: P – hugomg

1

Jeśli tworzysz formularz wewnątrz widżetu, możesz użyć this.id, aby uzyskać identyfikator tej instancji widgetu.

Jeśli Twój widget nazywa się my.form, identyfikator widgetu będzie my_form_0 i będzie zwiększany dla każdego nowo utworzonego widgetu formularza.

Aby utworzyć unikatowy identyfikator dla swoich elementów formularza, należy

var id = this.id + '_email'; 

'<label for="' + id + '"/>' 
'<input type="text" id="' + id + '"/>' 

To daje

<label for="my_form_0_email"/> 
<input type="text" id="my_form_0_email"/> 

Jeśli tworzysz wejście używając dijit.form.TextBox, że pole tekstowe ZAWSZE będzie mieć unikalny identyfikator na Twojej stronie. Rzeczywisty element <input> wewnątrz widgetu będzie miał identyfikator znaleziony przez pobranie identyfikatora widgetu.

Jeśli utworzyć TextBox programowo, można wykonać następujące czynności:

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

... zobacz mój komentarz do odpowiedzi Kernela Jamesa ... – hypno7oad

1

Jeśli nie dbają o zgodność z IE, można umieścić wewnątrz wkładu etykiecie:

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

, która działa dobrze w przypadku pól wyboru, ale co z wejściami tekstowymi? – Karolis

+0

Wnikliwa obserwacja.Czy możemy zostawić to jako ćwiczenie dla czytelnika? '' ' –

+0

Występuje w tej samej kwestii co OP. Wydaje się to prostą opcją. Jedyną wadą jest to, że trudniej jest stylizować na pewne projekty wizualne w ten sposób. W tych przypadkach łyżka księżycowa wydaje się mieć lepsze podejście. +1 dla zwykłego rozwiązania przypadku użycia – hypno7oad