좀 더 모듈화 된 접근 방법은 어떻습니까?
바이올린 또는 일이 didnt는 : http://jsfiddle.net/Varinder/24hsd/1/
설명
아이디어가 부착되어 DOM 어딘가에 추가 올바른 이벤트와 즉석에서 새로운 아코디언 요소를 만들 수 (동일)입니다.
리피터 HTML
마크 업을 DOM 어딘가의 template
에 추상화하고 JS를 사용하여이를 문자열로 구성하는 대신 참조하는 것이 일반적으로 더 관리하기 쉽습니다.
Heres는 마크 업에서 아코디언 템플릿 :
<div class="template">
<div class="accordion">
<h3 class="accordion-title">accordion title</h3>
<div class="accordion-content">
accordion content
</div>
</div>
</div>
Heres는 전체 HTML 마크 업 - 단지 경우 : 다른 아코디언 구성을 저장하여 오프 시작
<div class="page">
</div>
<div id="addShelf" class="button">+ Shelf</div>
<div id="addSection" class="button">+ Section</div>
<div class="template">
<div class="accordion">
<h3 class="accordion-title">accordion title</h3>
<div class="accordion-content">
accordion content
</div>
</div>
</div>
JS
:
var shelfConfig = {
collapsible: true,
autoHeight: false,
animated: "swing",
heightStyle: "content"
}
var shelfSectionConfig = {
active:false,
collapsible: true,
autoHeight: false,
animated: "swing"
}
Kepping 현재 아코디언 번호와 현재의 아코디언 섹션 번호의 트랙 (마지막 아코디언 내부 섹션의 수) - 당신이 아코디언 선반
var currentShelfNumber = 0;
var currentShelfSectionNumber = 0;
Chaching DOM 요소를 제거하는 기능이 필요한 경우 유용하게 사용할 수있는, 단순히 DOM에서 아코디언 템플릿의 복제 된 복사본을 반환하는 도우미 함수를 만들기 tempalte
사업부
var $page = $(".page");
var $accordionTemplate = $(".template").children();
var $addSection = $("#addSection");
var $addShelf = $("#addShelf");
에게 통지 참조
,536,
function getAccordionTemplate() {
return $accordionTemplate.clone();
}
주 기능 generateAccordion
- 두 개의 인수, 즉 제목 등에 현재 숫자를 추가하는 경우 accordionNumber
, 사용하려는 아코디언 구성을 확인하는 경우 accordionType
이 필요합니다. 그 다음 이름으로 다른 함수 attachAccordionEvents
에 DOM
function generateAccordion(number, accordionType) {
var $accordion = getAccordionTemplate();
var accordionTitle = "twerking bieber?";
if (accordionType == "shelf") {
accordionTitle = "Shelf " + number;
} else {
accordionTitle = "Shelf Section";
}
$accordion.find("h3").text(accordionTitle);
var $accordionWithEvents = attachAccordionEvents($accordion, accordionType);
return $accordionWithEvents;
}
주의에 전화를 추가 할 수 있습니다 부착 적절한 이벤트와 브랜드 때리기 새로운 아코디언을 반환하는 매개 변수와 함께
는 제안 -이 녀석을 아코디언 요소에 이벤트를 첨부합니다.
function attachAccordionEvents($accordionElement, accordionType) {
if (accordionType == "shelf") {
$accordionElement.accordion(shelfConfig);
} else {
$accordionElement.accordion(shelfSectionConfig);
}
return $accordionElement;
}
이
function manageSectionButton() {
if ($page.children().length > 0) {
$addSection.show();
} else {
$addSection.hide();
}
}
마침내 이벤트와 논리를 작동하려면 더 아코디언 선반이없는 경우 버튼이 표시 나던 "섹션을 추가"확실하게 또 다른 도우미 함수 :
$addShelf.on("click", function(e) {
e.preventDefault();
var newShelfNumber = currentShelfNumber + 1;
var $shelfElement = generateAccordion(newShelfNumber, "shelf");
currentShelfNumber = newShelfNumber;
$page.append($shelfElement);
manageSectionButton();
});
$addSection.on("click", function(e) {
e.preventDefault();
var newShelfSectionNumber = currentShelfSectionNumber + 1;
var $shelfSectionElement = generateAccordion(newShelfSectionNumber, "section");
var $activeShelfElement = $page.children().last().find(".accordion-content");
$activeShelfElement.append($shelfSectionElement);
});
... 그리고 그것에 대해. 이 도움이
희망,
건배
헤이 @의 B-엔 당신이 $'''호출하려고하는 코드 ('. 어린이 아코디언'). 아코디언 ("새로 고침") ;'''''var child = $ (". child-accordion") 이전에'''refresh'' 호출이 만들어지지 않았 으면 확인하는 것이 빠를 것입니다. accordion ({...}); '''조금? – Varinder
안녕하세요 @ Varinder, 나는 그것을 새로 고치려고하기 전에 요소가 존재한다고 확신합니다. 예를 들어 요소가 생성 된 후에 콘솔에 입력하면 $ ('. child-accordion')에 이 계속 표시됩니다. accordion ("refresh"); 20 : 23 : 01.853 오류 : 초기화 전에 accordion의 메서드를 호출 할 수 없습니다. '새로 고침'메서드를 호출하려고 시도했습니다. 반면 다음을 호출하면 올바르게 작동합니다. 20 : 23 : 06.048 $ ('. child-accordion').fadeOut ("느린"); –
http://jsfiddle.net/에서 빠른 피들링을 게시 할 수 있습니까? – Varinder