いくつかのjQueryUIダイアログからのイベントを観察する必要があります。それらはすべて、あなたが聞くことができるいくつかのイベントが標準で付属しています。今のところ問題ありません。
これを使用して、関数をopenイベントにバインドできます。
$(document).bind('dialogopen', function() {});
ただし、イベントが発生したダイアログを区別する必要があります。例えば:
$('#dialog1').dialog();
$('#dialog2').dialog();
それらのいずれかを開くと、同じイベントがトリガーされます。ドキュメントにバインドされた関数は、両方のダイアログを開いたときに起動します。これは私が望んでいることではありません。私は2つの可能な解決策を見つけましたが、どちらも気分は良くありませんが、少なくともその仕事をするでしょう。
解決策1:オープンイベントのコールバック関数によってカスタムイベントをトリガーする
// Trigger events
$('#dialog1').dialog({open: function() {
$(this).trigger('dialog1open')
}
});
$('#dialog2').dialog({open: function() {
$(this).trigger('dialog2open')
}
});
// Observe events
$(document).bind('dialog1open', function() {
//actions specifik to dialog 1 open event
});
$(document).bind('dialog2open', function() {
//actions specifik to dialog 2 open event
});
この方法では、すべてのイベントに対して、開始時にすべてのダイアログでカスタム関数を記述し、各ダイアログに固有のイベント名で転送する必要があります。
解決策2: イベントパラメータでターゲットをキャプチャします。次のようになります。
$(document).bind('dialogopen', function(event) {
el = event.target; // get the element triggering the event
switch(el.id) { // Action depending on the triggers id
case dialog1:
//do something
break;
case dialog2:
//do something else
break
}
});
一方、この方法では、キャプチャしたいイベントごとにスイッチケースをたくさん用意する必要があります。
ここでラッピングプラグインを作成するのは良い考えですか?id
各ダイアログにを与えるように強制するプラグイン。id
次に、プレフィックスまたはサフィックスとして各イベントを再トリガーします。#dialog1
たとえば、開くとカスタムイベントがトリガーされdialog1open
ます。
アイデアや具体的な解決策はここでいただければ幸いです
編集:私が言及しなかった重要なことは、主題(Like #dialog1
and #dialog2
)が知らないオブザーバーがいるということです。これを考慮に入れる必要があります。