ちょっと変だな、これ。2 つの jquery アコーディオン エンティティがあり、1 つのアコーディオンでアイテムをクリックすると、それを 2 番目のアコーディオンに動的に追加し、元のアコーディオンで非表示にしたいと考えています。
これは現在、A から B への移動、および B から A への移動でうまく機能しますが、アイテムを元のアコーディオンに戻すと、その後の A から B への移動は台無しになります。
http://jsfiddle.net/waveydavey/CAYth/を意味するjsfiddleの例を次に示します。コードが醜いことを完全に認識していることに注意してください-私はこのことを学んでいます。10倍良い方法を提案してください。以下をせよ:
- フィドルを実行します。
- 各項目の「+」をクリックするとアコーディオン2に移動します
- どれも本当によく動きます。
今これを行います:
- フィドルを実行します。
- 任意の「+」をクリックして 2 番目のアコーディオンに移動します
- 移動したアイテムの「x」をクリックすると、最初のセットに再表示されます
- 「+」項目をクリックして、2 番目のセットに追加します
- アコーディオンアイテムの表示が完全にめちゃくちゃ
どんなアドバイスでも大歓迎です。
jsfiddle コードは次のとおりです。
$(function() {
// create accordion entities
$('#avAccordion').accordion({
collapsible: true,
autoHeight: false,
active: false
});
$('#assignedAccordion').accordion({
collapsible: true,
autoHeight: false,
active: false
});
$('.accordionAdd').click(function(){
// destroy the accordion, prior to rebuilding
$('#avAccordion').accordion('destroy');
// get the h3 part and tweak it's contents
var h3bit = $(this).parent().clone();
$(h3bit).removeClass('freeContacts').addClass('assignedContacts');
$(h3bit).children('span').removeClass('ui-icon-circle-plus accordionAdd').addClass('ui-icon-circle-close accordionDel');
// get the div part after the h3
var divbit = $(this).parent().next().clone();
// rebuild original accordion
$( "#avAccordion" ).accordion({
collapsible: true,
autoHeight: false,
active: false
});
// move contents to other accordion
$('#assignedAccordion').append(h3bit)
.append(divbit)
.accordion('destroy')
.accordion({
collapsible: true,
autoHeight: false,
active: false
});
// hide original accordion entry
$(this).parent().hide();
//attach click handler to new item
$('.accordionDel').click(function(){
dropAssignedContact(this);
return false;
})
return false;
});
function dropAssignedContact(obj){
// unhide right hand object with appropriate data-id attr
var id = $(obj).parent().attr('data-id');
// delete myself
$(obj).parent().remove();
// unhide original
$('.freeContacts[data-id='+id+']').show();
$('#assignedAccordion').accordion('destroy').accordion({
collapsible: true,
autoHeight: false,
active: false
});
}
});