2012-02-09 14 views
2

私はonShow()という機能を持つ自分のオブジェクトを持っています。これは、オブジェクトが表示されているときに(私によって)呼び出されます。この関数を代入でオーバーライドできます。jQueryまたはプレーンJavaScriptでイベントハンドラを追加するにはどうすればよいですか?

o.onShow = function() { // something }; 

ただし、関数の以前のバージョンは削除されます。私は既存のハンドラを節約したいのであれば、私はそれをキャッシュし、新しいハンドラ内で呼び出す必要があります:

o.oldOnShow = o.onShow; 
o.onShow = function() { this.oldOnShow(); // something }; 

しかし、私は一つだけ、以前のハンドラをキャッシュすることができますこの方法。それらの多くがあればどうなりますか?

このタスクを実行する便利な方法はありますか?この仕事はどのように文学で命名されたのですか?これのためのメソッドはjQueryにありますか?

答えて

4

あなたは(あなたによって定義されたように)カスタムイベントをトリガする必要がある場合は、あなたが呼び出す必要があります.trigger()方法(あなたはそのイベントがトリガされなければならないと感じたときに):

$(o).trigger('my-awesome-event'); 

(あなたはjQueryのを1.7以上使用している場合)、次にあなたが.bind()かのいずれかを使用して、一人の以上のリスナーを定義します.on()

$(o).on('my-awesome-event', function(event){ ... }); 
+0

jqueryセットのみのjavascriptオブジェクトに適用できますか? – Dims

+0

@Dims:http://www.mrspeaker.net/2009/10/28/using-jquery-on-javascript-objects/を参照してください。 – rsenna

2

あなたはjQueryのbindメソッドを使用することができます。これは、イベントハンドラのリストにイベントハンドラを追加します

$(o).bind("show", function() {}); 

を、既存のハンドラを上書きしません。あなたが好きなようにHere are the docs

+0

可能な限り簡単です! –

5

jQueryのでは、できるだけ多くのハンドラを追加することができます。

$(o).on('show', function() { ... }); 

以降の呼び出しは、以前に結合ハンドラは削除されません。

+0

メソッド上のjQueryにはjQuery 1.7以上が必要です。 –

1

jQuery経由でイベントハンドラをアタッチすると、イベントハンドラがイベントの伝播を停止しない限り、他のイベントと競合することはありません。

あなたはむしろネイティブJavaScriptでこれを実現したい場合は、文字列の連結を使用する必要があります。

o.onShow = o.onShow + "function() { // something };" 
+0

Wow!これはハードコーディングよりも遅くないですか? – Dims

+0

ハードコーディングが意味するものがわかりません...イベントハンドラを連結する文字列は、もちろん、望ましい解決策ではありません.jQueryを介してハンドラを付けることが望ましいでしょう。 – jbabey

関連する問題