Domanda

Mi chiedevo come attivare a livello di programmazione un evento di modifica con YUI3: ho aggiunto un listener di modifica a un nodo della casella di selezione:

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

e da qualche altra parte nello script vogliono generare quell'evento. Funziona, ovviamente, quando un utente modifica il valore della casella di selezione nel browser. Ma ho provato molti modi per licenziarlo programmaticamente, nessuno dei quali ha funzionato. Tra cui:

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

Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione

YUI 3.0 non supporta la simulazione degli eventi change , come hai scoperto. Tuttavia sarà supportato in YUI 3.1. È nel bagagliaio ora.

Il tuo terzo tentativo:

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

dovrebbe funzionare in 3.1.

modifica

Sembra che tu possa semplicemente sostituire la versione YUI 3.0 di event-simulate.js con la versione trunk, e funzionerà in un'app 3.0 altrimenti. Finora non ho riscontrato alcun problema.

Altri suggerimenti

La solita soluzione non è quella di attivare a livello di codice l'evento, ma piuttosto spostare tutta la logica degli eventi in una funzione e invece chiamare quella funzione dal proprio codice dove appropriato.

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

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

Che ne dici di questo

Y.Event.simulate('#mynode', 'change');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top