Frage

Ich habe mich gefragt, wie programmatisch mit YUI3 ein Änderungsereignis ausgelöst - ich eine Änderung Zuhörer zu einer Auswahlbox Knoten hinzugefügt:

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

und irgendwo anders im Skript will dieses Ereignis feuern. Es funktioniert, natürlich, wenn ein Benutzer das Auswahlfeld Wert im Browser ändert. Aber ich habe viele Möglichkeiten versucht, es programmatisch zu schießen, von denen keines gearbeitet haben. Inklusive:

// 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');

Jede mögliche Hilfe würde geschätzt!

War es hilfreich?

Lösung

YUI 3.0 unterstützt nicht die change Ereignisse simuliert, wie Sie entdeckt haben. Allerdings wird es in YUI 3.1 unterstützt werden. Es ist im Kofferraum jetzt.

Ihr dritter Versuch:

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

sollte in 3.1 arbeiten.

Bearbeiten

Es sieht aus wie Sie können einfach die YUI 3.0-Version von event-simulate.js mit der Stamm Version ersetzen, und es wird in ein ansonsten 3.0 App arbeiten. Ich habe keine Probleme bisher gesehen.

Andere Tipps

Die übliche Lösung ist nicht programmatisch das Ereignis ausgelöst, sondern die ganze Ereignislogik auf eine Funktion, verschieben und stattdessen die Funktion aus dem Code aufrufen, wo angemessen.

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

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

Wie wäre es dieses

Y.Event.simulate('#mynode', 'change');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top