2011-01-11 13 views
5

Mam konfigurację formularza z dojo 1.5. Używam pliku dijit.form.ComboBox i dijit.form.TextBoxDojo: dojo onblur events

Funkcja Combobox ma takie wartości, jak "samochód", "rower", "motocykl", a pole tekstowe ma być przymiotnikiem funkcji Combobox. Więc nie ma znaczenia, co jest w Combobox, ale jeśli ComboBox ma wartość, to coś musi być wypełnione w TextBox. Opcjonalnie, jeśli nic nie jest w ComboBox, nic nie może być w TextBox i to jest w porządku. W rzeczywistości, jeśli coś nie jest w Combobox, wtedy nic nie musi być w polu tekstowym.

W zwykłym kodowaniu użyłbym tylko zdarzenia onBlur w polu tekstowym, aby przejść do funkcji, która sprawdza, czy ComboBox ma wartość. Widzę w dojo, że to nie działa ... przykład kod jest poniżej ...

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

Moją pierwszą próbą było dodać onblur ciągu < wejściowego > znaczniku deskryptora, ale odkrył, że to nie zadziała .

W jaki sposób Dojo sobie z tym poradzi? Czy to przez parametr dojo.connect? Mimo że w powyższym przykładzie combobox ma identyfikator "vehicle_1", a pole tekstowe ma id "filter_value_1", może istnieć wiele comboboxów i pól tekstowych numerujących kolejno w górę. (vehicle_2, vehicle_3, etc)

Wszelkie porady lub linki do zasobów byłyby bardzo mile widziane. Janie

Odpowiedz

7

Aby dodać wydarzenie onblur trzeba zastosować dojo.connect():

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

Jeśli istnieje wiele wejść, które trzeba podłączyć do tego, należy rozważyć dodanie niestandardowej klasy dla tych, którzy potrzebują do zacierania i stosując dojo.query aby połączyć wszystkie z nich:

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

w funkcji, która jest przekazywana do dojo.connect można dodać w niektórych kodu rozebrać się numer na końcu i używać go odwołać każdy filter_value_ * dane wejściowe do sprawdzania poprawności.

dojo.connect()

Combobox documention

4

onBlur wydaje się działać dobrze dla mnie, nawet w widżetów HTML-zadeklarowana. Oto bardzo prymitywny przykład:

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

(Czy Firebug/WebKit inspektor/dev narzędzi IE8 otwarte zobaczyć console.log wiadomości.)

Jednak dla bardziej idealnego rozwiązania tego problemu, to polubisz być także zainteresowany w niektórych innych widżetów ...

Mam nadzieję, że to pomoże Ci zacząć.