2009-07-31 12 views
16

Zastanawiałem się, jak programowo ognia zdarzenie zmienia się z YUI3 - dodałem słuchacza Przejdź do jednego węzła wybierz nadwozia:YUI 3 programowo zmiana pożar zdarzenie

Y.get('#mynode').on('change', function(e) { 
Alert(“changed me”); 
}); 

i gdzie indziej w skrypcie chce odpalić to wydarzenie. Działa to oczywiście, gdy użytkownik zmienia wartość pola wyboru w przeglądarce. Ale próbowałem na wiele sposobów, aby uruchomić programowo, z których żaden nie działa. W tym:

// All below give this error: T[X] is not a function (referring to what's called in .invoke(), // in the minified javascript 
Y.get('#mynode').invoke('onchange'); 
Y.get('#mynode').invoke('change'); 
Y.get('#mynode').invoke('on','change'); 
Y.get('#mynode').invoke("on('change')"); 


/* Tried using .fire() which I found here: 
* http://developer.yahoo.com/yui/3/api/EventTarget.html#method_fire 
* Nothing happens 
*/ 

Y.get('#mynode').fire('change'); 

/* Looking around the APIs some more, I found node-event-simulate.js: 
* http://developer.yahoo.com/yui/3/api/node-event-simulate.js.html, 
* which by its name would seem to have what I want. I tried: 
* Error: simulate(): Event 'change' can't be simulated. 
* ((function(){var I={},B=new Date().getTim...if(B.isObject(G)){if(B.isArray(G)){E=1;\n) 
*/ 

Y.get('#mynode').simulate('change'); 

Każda pomoc będzie doceniona!

Odpowiedz

12

YUI 3.0 nie obsługuje symulacji wydarzeń change, jak odkryliśmy. Jednak będzie wspierany w YUI 3.1. Teraz jest to in the trunk.

Twoja trzecia próba:

Y.get('#mynode').simulate('change'); 

powinny działać w 3.1.

edit

Wygląda jak można po prostu zastąpić wersję event-simulate.js YUI 3.0 z wersji trunk, i będzie działać w inny sposób 3,0 aplikacji. Nie widziałem dotąd żadnych problemów.

+1

Po prostu notatka: Musisz Y.use ("zdarzenie-symulator zdarzenia", ...), aby funkcja .simulate() była dostępna. – thenickdude

6

Zazwyczaj nie należy programowo uruchamiać zdarzenia, lecz przenieść całą logikę zdarzeń do funkcji, a zamiast tego wywołać tę funkcję z kodu, jeśli jest to właściwe.

Y.get('#mynode').on('change', function(e) { 
    AlertUserOfChange(); 
}); 

function AlertUserOfChange() 
{ 
    Alert(“changed me”); 
} 
+0

Tak, normalnie to robię, ale naprawdę chciałem wiedzieć, czy to było możliwe. Chyba tak nie jest. – ash

+1

'Y.get ('# mynode'). On ('change', AlertUserOfChange);' to wszystko, czego potrzebujesz. Następnie dodaj parametr do AlertUserOfChange, tak jak w przypadku 'funkcji AlertUserOfChange (e)' – imns

-1

Jak o tym

Y.Event.simulate('#mynode', 'change'); 
+0

Niestety, to nie działa. – ash