2011-07-29 15 views
5

Si está utilizando entradas de formulario dojo y quieren tener etiquetas para que ellos como:con enlace dojo

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

la etiqueta no se puede hacer clic, porque no hay manera de saber el ID de la entrada antes es renderizado

¿Existe una solución para esto además de piratear una identificación en ese dojo genera para ese elemento?

ACTUALIZACIÓN

En realidad es aún más difícil de lo que pensaba, porque el campo de entrada en el dojo se representa como

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

y el campo de entrada subyacente no tiene un id

Respuesta

1

¿Intentó dar una identificación a la entrada?

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

Si recuerdo correctamente, este id puede ser usado tanto por dojo.byId (a buscar el DOMNode aka la etiqueta de entrada) y por dijit.byId (a buscar el dijit ejemplo Widget)

+1

Esta solución solo funciona para casos simples. Imagine tener un widget con esta etiqueta y entrada en la plantilla. Ahora bien, si desea colocar varias copias de este mismo widget en la misma página, tendrá problemas si utiliza los identificadores. Por lo general, evitas usar id y usas dojoAttachPoint para hacer referencia a esa instancia particular del elemento de JS. Básicamente parece que dijit.form.Label no se encuentra en la biblioteca que se puede adjuntar utilizando dojoAttachPoint en lugar de id, lo que significa que es probable que sea hora de escribir un dojox.form.Label;) – Karolis

+0

Bueno, "piratear en el id dojo genera" no es tan malo, entonces: P – hugomg

1

Si está creando el formulario dentro de un widget, puede usar this.id para obtener el ID de esa instancia del widget.

Si su widget se llama my.form, la ID del widget será my_form_0 y se incrementará para cada nuevo widget de formulario creado.

Para crear un identificador único para sus elementos de formulario, utilice

var id = this.id + '_email'; 

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

qué le dará

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

Si va a crear la entrada con el dijit.form.TextBox, que cuadro de texto SIEMPRE tendrá una identificación única en su página. El elemento dom real <input> dentro del widget tendrá la ID que se encuentra al tomar la ID del widget.

Si crea el cuadro de texto mediante programación, puede hacer lo siguiente:

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

... vea mi comentario para la respuesta de Kernel James ... – hypno7oad

1

Si no se preocupan por la compatibilidad con IE, se puede colocar en el interior de la entrada de la etiqueta:

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

que funciona bien para casillas de verificación, pero ¿qué pasa con las entradas de texto? – Karolis

+0

Una observación astuta.Vamos a dejar eso como un ejercicio para el lector, ¿o sí? '' ' –

+0

Encontrando el mismo problema que el OP. Esto parece una opción simple. El único inconveniente es que se vuelve más difícil darle estilo a ciertos diseños visuales de esta manera. En esos casos, la cuchara lunar parece tener un mejor enfoque. +1 para una solución de caso de uso simple, aunque – hypno7oad