私はJQueryを初めて使用し、タブが動的に追加され、そのコンテンツがAjaxを介してロードされるタブ付きインターフェースを実装しようとしています。JQuery-ui タブを使用しています。私は何日もこの問題を解決しようとしてきました. 現在、タブを 1 つだけ追加すると、インターフェイスは機能します。タブが作成され、選択され、そのコンテンツが Ajax を介して読み込まれます。ただし、2 番目のタブを追加すると、そのコンテンツは適切に読み込まれているように見えますが、最初のタブを選択すると、2 番目のタブの内容が最初のタブの内容に追加されて表示され、切り替えることができなくなります。タブ。
私は Rails 3 に取り組んでいます。コードは Coffeescript で書かれていますが、Javascript を使う人にとっては読みやすいはずです。以下にいくつかの注意事項を示します。
$('a.edit')
タブを追加するセレクターです。複数回の起動を避けるために、マウス クリックでタブの追加を入札する前に、まずセレクターが既にバインドされているかどうかを確認します。- タブのクローズはうまく機能します
- URL とタブ名は属性として渡されます。URL は html フォームを指します (Rails のパーシャルを介して)
- 生成された html でタブを追加すると、「ui-tabs-1」と「ui-tabs-2」という ID を持つ 2 つの ui-tab-panel が作成されます。タブには、秒を指す href があります。最初のみ「.ui-tabs-hide」があります。
- 2 番目のタブを追加すると、「ui-tabs-2」と「ui-tabs-4」を指すタブを持つ 4 つの ui-tab-panel が作成されますが、「.ui-tabs-隠れる"。
ここにコードがあります
$(->
if !($('a.edit').is('.bound'))
$('a.edit').on('click', ->
addTab($(this).attr('url'), $(this).attr('tag'))
)
$('a.edit').addClass('bound')
$tabs = $('#tabs').tabs
#$tabs.tabs
closable: true
cache: true
tabTemplate: '<li><a href="#{href}">#{label}</a> <span class="ui-icon ui-icon-close">Remove Tab</span></li>'
add: (event, ui) ->
$tabs.tabs('select', '#' + ui.panel.id)
addTab = (url, tab_name)->
$tabs.tabs('add',url,tab_name)
$( "#tabs span.ui-icon-close" ).live(
"click", ->
index = $( "li", $tabs ).index( $( this ).parent() )
$tabs.tabs( "remove", index )
)