2011-01-11 11 views
5

Ho una configurazione modulo con dojo 1.5. Sto usando un dijit.form.ComboBox e un dijit.form.TextBoxDojo: eventi dojo onblur

Il Combobox ha valori come "auto", "bici", "moto" e la casella di testo è pensata per essere un aggettivo per il Combobox. Quindi non importa cosa è nella casella combinata ma se il ComboBox ha un valore allora qualcosa DEVE essere compilato nel TextBox. Facoltativamente, se non c'è nulla nel ComboBox, niente può essere nel TextBox e va bene. In effetti, se qualcosa non si trova nel Combobox, nulla deve trovarsi nella casella di testo.

Nella codifica normale, dovrei semplicemente utilizzare un evento onBlur nella casella di testo per passare a una funzione che controlla se il ComboBox ha un valore. Vedo in dojo che questo non funziona ... Codice esempio è qui sotto ...

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" 
       /> 

Il mio primo tentativo è stato quello di aggiungere un onBlur entro <ingresso> tag del descrittore, ma ha scoperto che non funziona .

Come gestisce questo Dojo? È tramite un parametro dojo.connect? Anche se nell'esempio sopra la casella combinata ha un id di "vehicle_1" e la casella di testo ha un id di "filter_value_1", ci possono essere numerose caselle combinate e caselle di testo che numerano in modo sequenziale verso l'alto. (veicolo_2, veicolo_3, ecc.)

Qualsiasi consiglio o collegamento a risorse sarebbe molto apprezzato. Janie

risposta

7

per aggiungere l'evento onBlur si dovrebbe usare dojo.connect():

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

Se si dispone di più ingressi che avete bisogno di collegare questo a, considerare l'aggiunta di una classe personalizzata per coloro che hanno bisogno di offuscare e utilizzando dojo.query per connettersi a tutti loro:

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 */ }); 
    }); 

nella funzione che viene passato dojo.connect che si potrebbe aggiungere qualche codice per togliere il numero sull'estremità e utilizzarlo per ogni riferimento filter_value_ * input per la convalida.

dojo.connect()

Combobox documention

4

onBlur sembra funzionare bene per me, anche nei widget HTML-dichiarato. Ecco un esempio molto rudimentale:

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

(Avere Firebug/webkit ispettore/IE8 strumenti di sviluppo aperto per vedere i messaggi console.log.)

Tuttavia, per una soluzione più ideale per questo, si potrebbe anche essere interessati a qualche altro widget ...

Speriamo che questo possa farti iniziare.