Question

Je me demandais comment déclencher par programmation un événement de modification avec YUI3. J'ai ajouté un écouteur de modification à un nœud de la boîte de sélection:

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

et quelque part dans le script veulent déclencher cet événement. Cela fonctionne, bien sûr, lorsqu'un utilisateur modifie la valeur de la zone de sélection dans le navigateur. Mais j'ai essayé de nombreuses manières de le déclencher par programme, mais aucun n'a fonctionné. Y compris:

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

Toute aide serait appréciée!

Était-ce utile?

La solution

YUI 3.0 ne prend pas en charge la simulation des événements change , comme vous l'avez découvert. Cependant, il sera supporté dans YUI 3.1. C’est dans le coffre maintenant.

Votre troisième tentative:

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

devrait fonctionner en 3.1.

modifier

Il semble que vous puissiez simplement remplacer la version YUI 3.0 de event-simulate.js par la version trunk, et cela fonctionnera dans une application 3.0 autrement. Je n'ai vu aucun problème jusqu'à présent.

Autres conseils

La solution habituelle consiste à ne pas déclencher l'événement par programme, mais à déplacer toute la logique de l'événement vers une fonction et à appeler cette fonction à partir de votre code, le cas échéant.

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

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

Que diriez-vous de cela

Y.Event.simulate('#mynode', 'change');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top