2011-01-11 23 views
5

Tengo una configuración de formulario con dojo 1.5. Estoy usando un dijit.form.ComboBox y un dijit.form.TextBoxDojo: dojo onblur events

El Combobox tiene valores como "auto", "bicicleta", "motocicleta" y el cuadro de texto está destinado a ser un adjetivo del Combobox. Así que no importa lo que hay en el Combobox, pero si el ComboBox tiene un valor, entonces algo se DEBE llenar en el TextBox. Opcionalmente, si no hay nada en el ComboBox, entonces nada puede estar en el TextBox y eso está bien. De hecho, si algo no está en el Combobox, entonces NO DEBE haber nada en el cuadro de texto.

En la codificación normal, utilizaría un evento onBlur en el cuadro de texto para ir a una función que verifica si el ComboBox tiene un valor. Veo en el dojo que esto no funciona ... Código de ejemplo está por debajo ...

Vehicle: 
    <input dojoType="dijit.form.ComboBox" 
     store="xvarStore" 
     value="" 
     searchAttr="name" 
     name="vehicle_1" 
     id="vehicle_1" 
    /> 
Descriptor: 
<input type="text" 
       dojoType="dijit.form.TextBox" 
       value="" 
       class=lighttext 
       style="width:350px;height:19px" 
       id="filter_value_1" 
       name="filter_value_1" 
       /> 

Mi primer intento fue añadir un onBlur dentro <entrada> etiqueta del descriptor, pero descubrió que eso no funciona .

¿Cómo maneja Dojo esto? ¿Es a través de un parámetro dojo.connect? Aunque en el ejemplo anterior, el cuadro combinado tiene una identificación de "vehicle_1" y el cuadro de texto tiene una identificación de "filter_value_1", puede haber numerosos cuadros combinados y cuadros de texto numerados secuencialmente hacia arriba. (vehicle_2, vehicle_3, etc)

Cualquier consejo o enlace a los recursos sería muy apreciado. Janie

Respuesta

7

Para añadir el evento onBlur se debe utilizar dojo.connect():

dojo.connect(dojo.byId("vehicle_1"), "onBlur", function() { /* do something */ }); 

Si tiene varias entradas que usted necesita para conectar esta a, considerar la adición de una clase personalizada para aquellos que necesitan para difuminar y el uso de dojo.query para conectarse a todos ellos:

Vehicle: 
    <input dojoType="dijit.form.ComboBox" 
     store="xvarStore" 
     class="blurEvent" 
     value="" 
     searchAttr="name" 
     name="vehicle_1" 
     id="vehicle_1" 
    /> 

dojo.query(".blurEvent").forEach(function(node, index, arr) { 
     dojo.connect(node, "onBlur", function() { /* do something */ }); 
    }); 

en la función que se pasa a dojo.connect se podría añadir en algún código que se deben eliminar el número en el extremo y lo utilizan para hacer referencia a cada filter_value_ * entrada para validación.

dojo.connect()

Combobox documention

4

onBlur parece funcionar muy bien para mí, incluso en los widgets de HTML-declarado. Aquí hay un ejemplo muy rudimentario:

http://jsfiddle.net/kfranqueiro/BWT4U/

(Tener inspector Firebug/WebKit/dev herramientas IE8 abierta para ver los mensajes console.log.)

Sin embargo, para una solución más ideal para esto, es posible que le interesen también algunos otros widgets ...

Esperamos que esto pueda comenzar.