YUI 3 programmatically fire change event

本秂侑毒 提交于 2019-12-04 10:11:48

问题


I was wondering how to programmatically fire a change event with YUI3 -- I added a change listener to one select box node:

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

and somewhere else in the script want to fire that event. It works, of course, when a user changes the select box value in the browser. But I've tried many ways to fire it programmatically, none of which have worked. Including:

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

Any help would be appreciated!


回答1:


YUI 3.0 does not support simulating the change events, as you've discovered. However it will be supported in YUI 3.1. It is in the trunk now.

Your third attempt:

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

should work in 3.1.

edit

It looks like you can just replace the YUI 3.0 version of event-simulate.js with the trunk version, and it will work in an otherwise 3.0 app. I haven't seen any issues so far.




回答2:


The usual solution is not to programmatically fire the event, but rather move all the event logic to a function, and instead call that function from your code where appropriate.

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

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



回答3:


How about this

Y.Event.simulate('#mynode', 'change');


来源:https://stackoverflow.com/questions/1215012/yui-3-programmatically-fire-change-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!