YUI 3 программно запускает событие изменения

StackOverflow https://stackoverflow.com/questions/1215012

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне было интересно, как программно запустить событие изменения с помощью YUI3 - я добавил прослушиватель изменений к одному узлу select box:

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

и где-то еще в скрипте нужно запустить это событие.Конечно, это работает, когда пользователь изменяет значение поля выбора в браузере.Но я перепробовал много способов запустить его программно, но ни один из них не сработал.Включая:

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

Мы будем признательны за любую помощь!

Это было полезно?

Решение

YUI 3.0 не поддерживает имитацию change события, как вы уже выяснили.Однако это будет поддерживаться в YUI 3.1.Это так в багажнике сейчас же.

Твоя третья попытка:

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

должно работать в 3.1.

Редактировать

Похоже, вы можете просто заменить версию YUI 3.0 на event-simulate.js с версией trunk, и она будет работать в приложении, отличном от версии 3.0.До сих пор я не видел никаких проблем.

Другие советы

Обычное решение состоит не в том, чтобы программно инициировать событие, а в том, чтобы переместить всю логику события в функцию и вместо этого вызывать эту функцию из своего кода, где это необходимо.

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

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

Как насчет этого

Y.Event.simulate('#mynode', 'change');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top