2012-03-22 19 views
1

、私は次の2行のコードのいずれかを使用してイベントをトリガーするウィジェットを維持しようとしている:のjQuery UIウィジェット「変更」イベント

this.element.trigger('change'); // or... 
stop: function (event, ui) { that.element.change(); } 

単語「変更」はコード内でのみ4回発生します上記の2つのフォームのいずれかでしかし、私はここで何が起こっているのか分かりません。変更呼び出しにはイベントハンドラはなく、バインド、デリゲート、オンまたはライブ呼び出しがないため、外部の何かがこれを設定している可能性があります。誰でも私を埋めることができますか?これに関する文書はありますか?ありがとう。

答えて

2

これらの2行のコードは、2つの異なる構文を使用して、変更イベントをthis.elementにトリガするだけです。 .trigger()を使用して

this.element.trigger('change'); 

または速記法.change()使用して:あなたは、実際にこのイベントを処理するためにthis.elementによって表される要素にイベントハンドラをバインドでき

that.element.change(); 

を。


あなたのプラグインを知らないと、正確にはthis.elementであなたに答えることは難しいです。

しかし、オートコンプリートプラグインの例を考えてみましょう。この1つでは、this.elementは、実際にオートコンプリートプラグインが適用される入力フィールドです。おそらく、あなたの質問に行われるように変更イベントがトリガされた場合は、あなたがこのような入力にイベントハンドラをバインドできます。このプラグインはjQuery UI Widget Factoryに依存している場合今

$('#myinput') 
    .autocomplete() 
    .bind('change', function() { }); 

、それを使用することをお勧めしますメソッド_trigger()は、jquery .trigger()の代わりにイベントをトリガします。

_trigger()を使用すると、プラグインのオプションで定義されたコールバックが正しいコンテキストで実行され、そのイベントがthis.element(上記と同様)でトリガーされます。だから、可能性があり:

$('#myinput') 
    .somePlugin({ 
     change: function(e, someData) { 
      // "this" here will be `this.element´ 
     } 
    }) 
    .bind('change', function() { ... }); 
0

答えは簡単であることが判明 - jQueryの舞台裏で何もしない、何もバインドの/ etc呼び出しはありませんでした、何のイベントハンドラがなかったので、トリガー呼び出しが何もしませんでした。私はそれらをコメントアウトし、ウィジェットはまったく同じように動作しました。 Doh。

関連する問題