JQueryUIで生成するクラス 'ダイアログ'のリンクを持つページがあります。dialogをクリックします。これらのダイアログは、ページにある他の要素から作成され、クリックされたときに新しいJQueryUI [タブ](http://jqueryui.com/demos/dialog/)を作成するクラス 'add_tab'のリンクを含むことができます。これらのタブは、Ajax経由でコンテンツをロードし、同じ構造で構成されています。これは、ダイアログの 'add_tab'リンクが新しいタブを作成し、さらに 'add_tab'リンクを含むダイアログを生成する 'dialog'リンクを含むことを意味します。 jQueryの1.7の.on() methodは、私が正しく追加タブのダイアログに表示される「add_tab」リンクのクリックハンドラを登録してトラブルを持って使用しJQueryUIタブ内のJQueryUIダイアログの.on()とのイベントバインド
<div id="tabs">
<ul>
<li><a href="#tabs-1">tab 1</a></li>
</ul>
<div id="tabs-1">
<p>This tab contains a <a href="#popup1" class="dialog" target="_new">popup</a> and a direct link to a <a href="tabs2.htm" class="add_tab">new tab</a>.</p>
<div id="popup1" style="display:nonee;">This popup contains a link to a <a href="tabs2.htm" class="add_tab" target="_new">new tab</a>.</div>
</div>
:
これは、基本的なHTML構造です。私は、ダイアログボックスを生成するために、新たに生成されたタブの 'ダイアログ'リンクのクリックハンドラを登録することができますが、内のダイアログに表示される 'add_tab'リンクのクリックハンドラを登録できません。私は簡単なテストバージョンをhttp://www.kantl.be/ctb/temp/jquerytest/tabs1.htmにオンラインで入れました。 http://www.kantl.be/ctb/temp/jquerytest/tabs1.htm上
- を、「ポップアップ」をクリックしてください:シナリオ以下の例のために、取るこれは「新しいタブ」をクリックし、ダイアログでJQueryUIダイアログ
- を生成します。これは
- 新しいJQueryUIタブを生成します。 'tabs2.htm'と表示された新しく追加されたタブで 'popup'をクリックしてください:これはJQueryUIダイアログを生成します
ダイアログで 'new tab'をクリックします:新しいJQueryUIタブは生成されません新しいウィンドウでの目標
= =>これは、このイベントハンドラが明らかに「tabs2.htm」ラベル]タブで、新しく追加されたタブ
で生成された内部ダイアログを発生する「add_tab」リンクについて正しく登録ではありません方法を示して「新しいタブをクリックします「これは新しいJQueryUIタブを生成します
==>これは、このイベントハンドラが正しく登録されている様子を示して 『新しく追加されたタブ
これは私のjavascriptのコードである内部で直接発生add_tab』リンク:
// these event registrations register clicks on $('a.dialog') and $('a.add_tab') to open new JQueryUI dialogs/tabs
// note: this event registration works for all such links on the original page
$('a.dialog').on('click', function(){
$($(this).attr('href')).dialog();
return false;
});
$('a.add_tab').on('click', function(){
$tabs.tabs("add", $(this).attr('href'), 'added tab');
$('.ui-dialog-content').each(function(){$(this).dialog('close')})
return false;
});
// tabs: upon creation, register clicks on nested $('a.dialog') and $('a.add_tab') to open new JQueryUI dialogs/tabs
var $tabs = $("#tabs").tabs({
add: function(event, ui) {
$tabs.tabs('select', '#' + ui.panel.id);
$tabs.tabs($tabs.tabs('option', 'selected'))
.on('click', 'a.dialog', function(){
$($(this).attr('href')).dialog();
return false;
})
// this registration doesn't seem to work for <a class="add_tab"> links occurring inside generated JQueryUI dialogs inside added JQueryUI tabs
.on('click', 'a.add_tab', function(){
$tabs.tabs("add", $(this).attr('href'), 'added tab');
return false;
});
}
});
私はです。があります。上記のコードで最後のイベントハンドラを手伝ってもらえますか?どんな助けでも大歓迎です!
あなたの考えをありがとう。実のところ、これは私の元々のアプローチでしたが、パフォーマンスに敏感ではないと思います。私の実際のアプリには、元のページと新たに生成されたタブの両方に表示される要素に対して登録する必要のあるイベントが多数あります。体の全てを束縛しすぎているように見えました(そして私はFirefoxのメモリが大幅に増えたと気付きました)ので、私は縮小しようとしました。 – rvdb
さらに、最初のページで生成されたダイアログと追加されたタブの間でページ構造に違いは見られません。**両方ともターゲット要素を本文に移動します。それでも、 'add_tab'は元のページで生成されたダイアログ内で_do_ workをリンクします。私はこれがすべてのタブで動作するか、まったく動作しないことを期待しています。本文にバインドする以外に、別の解決策が表示されますか(たとえば、ダイアログが添付されているコンテナを指定できますか?) – rvdb
私は身体に委任するのはあまり好きではありません。私は何かを考え、あなたに戻ってきますか? –