YUI 3はプログラムで変更イベントを起動します
質問
YUI3を使用してプログラムで変更イベントを発生させる方法を知りたい-1つの選択ボックスノードに変更リスナーを追加しました:
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ではサポートされます。 トランク内になりました。
3回目の試行:
Y.get('#mynode').simulate('change');
3.1で動作するはずです。
編集
YUI 3.0バージョンの event-simulate.js
をトランクバージョンに置き換えることができるようです。それ以外の場合は3.0アプリで動作します。これまでに問題は見ていません。
他のヒント
通常の解決策は、プログラムでイベントを発生させるのではなく、すべてのイベントロジックを関数に移動し、代わりに適切な場所でコードからその関数を呼び出すことです。
Y.get('#mynode').on('change', function(e) {
AlertUserOfChange();
});
function AlertUserOfChange()
{
Alert(“changed me”);
}
これについてはどうですか
Y.Event.simulate('#mynode', 'change');
所属していません StackOverflow