Pergunta

Eu queria saber como ao fogo programaticamente um evento de alteração com YUI3 - eu adicionei um ouvinte de alteração a um seleto nó caixa:

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

e em outro lugar no script querem fogo que evento. Ele funciona, é claro, quando um usuário muda o valor da caixa de seleção no navegador. Mas eu tentei muitas maneiras de fogo-lo por meio de programação, nenhum dos quais trabalharam. Incluindo:

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

Qualquer ajuda seria apreciada!

Foi útil?

Solução

YUI 3.0 não suporta simulando os eventos change, como você descobriu. No entanto, será apoiada em YUI 3.1. É no tronco agora.

A sua terceira tentativa:

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

devem trabalhar em 3.1.

Editar

Parece que você pode simplesmente substituir a versão de event-simulate.js YUI 3.0 com a versão tronco, e ele vai trabalhar em um aplicativo 3.0 contrário. Eu não vi qualquer problema até agora.

Outras dicas

A solução usual é não atear fogo programaticamente o evento, mas sim mover toda a lógica de evento para uma função, e em vez disso chamar essa função do seu código onde for apropriado.

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

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

Como sobre este

Y.Event.simulate('#mynode', 'change');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top