YUI 3 программно событие смены огня
Мне было интересно, как программно запускать событие изменения с помощью YUI3 - я добавил слушателя изменений в один поле выбора node:
Y.get('#mynode').on('change', function(e) {
Alert("changed me");
});
и где-нибудь еще в script хотите запустить это событие. Это работает, конечно, когда пользователь меняет значение окна выбора в браузере. Но я пробовал много способов запустить его программно, ни одна из которых не сработала. В том числе:
// All below give this error: T[X] is not a function (referring to what 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');
Любая помощь будет оценена!
Ответы
Ответ 1
YUI 3.0 не поддерживает симуляцию событий change
, как вы обнаружили. Однако он будет поддерживаться в YUI 3.1. Теперь в соединительной линии.
Ваша третья попытка:
Y.get('#mynode').simulate('change');
должен работать в версии 3.1.
изменить
Похоже, вы можете просто заменить версию YUI 3.0 event-simulate.js
версией trunk, и она будет работать в приложении 3.0. Я пока не видел никаких проблем.
Ответ 2
Обычное решение заключается не в том, чтобы программно запускать событие, а в переносе всей логики событий в функцию, и вместо этого вызывать эту функцию из вашего кода, где это необходимо.
Y.get('#mynode').on('change', function(e) {
AlertUserOfChange();
});
function AlertUserOfChange()
{
Alert("changed me");
}
Ответ 3
Как насчет этого
Y.Event.simulate('#mynode', 'change');