16

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

どんな助けでも大歓迎です!

4

3 に答える 3

12

changeあなたが発見したように、YUI 3.0 はイベントのシミュレートをサポートしていません。ただし、YUI 3.1 でサポートされる予定です。今はトランクにいます。

3 回目の試行:

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

3.1で動作するはずです。

編集

の YUI 3.0 バージョンをevent-simulate.jsトランク バージョンに置き換えるだけで、それ以外の場合は 3.0 アプリで動作するようです。これまでのところ、問題は見られませんでした。

于 2010-02-04T17:41:22.650 に答える
6

通常の解決策は、プログラムでイベントを発生させるのではなく、すべてのイベント ロジックを関数に移動し、代わりに適切な場所でコードからその関数を呼び出すことです。

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

function AlertUserOfChange()
{
    Alert(“changed me”);
}
于 2009-07-31T21:44:15.600 に答える
-1

これはどう

Y.Event.simulate('#mynode', 'change');
于 2009-07-31T21:51:38.190 に答える