2010-06-09 5 views
1

내 자체 자바 스크립트 & jquery를 가르치고 있습니다.이 말은 낮은 이마의 질문 일 수도 있고, 지나치게 많은 사람이 코드를 통과 할 수도 있지만, 의견을 기다리고 있습니다. . 나는 주변을 둘러 보았고 내 질문에 깔끔하게 다룰 수있는 것처럼 보이는 실을 찾지 못했습니다.목록에서 아코디언 메뉴를 만들려고 시도합니다. - jquery indexhibit

메신저 cms indexhibit (새로운 태그를 만들 수 없습니다!)를 사용하고 생성 한 메뉴 목록에서 아코디언 스타일 메뉴를 만들려고합니다. 필자는 기본적으로 작업이 끝난 후에 기존 작업을 수정하지만 .click과 .toggle 사이의 충돌과 if 문을 혼란스럽게하는 의심의 여지가있는 몇 가지 단점이 있습니다.

기본적으로 처음부터 다시 시작하여 다시 할 수 있습니다. a) 내 실수에서 배우십시오. b) 무슨 일이 일어나고 있는지 이해합니다. 여기에서 어디로 가야할지 또는 문제를 해결하는 방법을 알지 못해서 지금 문제가 발생했습니다.

누구나 문서 머리글의 스크립트가 어떻게 작동하는지 신속하게 분석 할 수 있습니까? 갈등의 본질에 대한 통찰력 Im Im seeing과 그들을 해결하기 위해 어떤 접근법이 필요할 수 있습니까? 새로 시작할 계획이라면 어떻게하면 될까요? 여기

행동 (사마귀 및 모든)에서 볼 수있는 테스트입니다 :

<script type='text/javascript'> //im not entirely clear as to what this achieves 
path = 'path/to/script/'; 
$(document).ready(function() { 
setTimeout('move_up()', 1); 
expandingMenu(0); 
expandingMenu(1); 
expandingMenu(2); 
expandingMenu(3); 
expandingMenu(4); 
//etc 
}); 
</script> 

생성 된 목록 :

이 스크립트는 문서 헤드에 들어가는 http://stillstatic.nfshost.com/


<ul> 
<li class='section-title active_menu'>blogs</li> 
<li><a class="active" href='#' onclick="do_click();">3</a></li> 
</ul> 

<ul> //this menu section dose not have a label: class .section-title 
<li><a href='#' onclick="do_click();">1</a></li> 
<li><a href='#' onclick="do_click();">2</a></li> 
</ul> 

<ul> //this menu section is not the 'active menu' this is achieved by the jquery script 
<li class='section-title'>writing</li> 
<li><a href='#' onclick="do_click();">4</a></li> 
<li><a href='#' onclick="do_click();">5</a></li> 
</ul> 

외부 스크립트의 고기 : 네 말이 맞아

function expandingMenu(num) { 
var speed = 500; 
var menu_title = $("#menu ul").eq(num).children(":first"); // ie. first child be the   title with the class .section-title unless the user turned it off 
var menu_items = $("#menu ul").eq(num).children().filter(function (index) { return index > 0; }); // ie. any li NOT in position 0, below li.section-title 

if (menu_items.is(".active") == true) { 
menu_title.addClass("active_menu"); //Add a class to the active list so we can style it. 
} 
if (menu_title.is(".section-title") == true){ // this if prevents interference with users who turn off the section titling 

if ((menu_items.is(".active") == false) && (menu_items.is(":visible")) ) { 
menu_items.hide(0);// first we hide the inactive exhibits 
} 

$('li').click(function(){ 
if ((menu_title.is(":visible") == true) ){ 
menu_items.hide(speed); 
    } 
if ((menu_items.is(":hidden") == true) && ((''))){// ?! without this EMPTY second condition things break down??? hu?. . . 
menu_items.show(speed); 
} 
}) 

menu_title.css({cursor:"pointer"}).toggle(// add click functions + pointer to  menu_title 
function() { 
menu_items.show(speed);//Open it up 
}, 
function() { 
// this function could even be empty but without a pointless 'if' things get really weird 
if (menu_items.is(".xx")) 
menu_items.hide(speed); //Take the menu item off of active duty! 
} 
) 
} 
} 

답변

1

- 정확히 문제가 그것으로 무엇 - (현재 잘못된 형식)를 통해 웨이드 코드를 많이 .. 샘플을 실행하는 것 ? 머리의 코드에 관해서는

- 이론적으로, 최초의 리튬을 확장 - move_up은()

expandingMenu (0) 코드합니다 (의 setTimeout)에 정의되어 있지 않습니다. 이 문서의 준비, 그리고 아마도 좀 더 우아한한다 :

$("#menu ul li").click(); 

jqueryui.com는 임은 분명 짜고

+0

다른 사람이 CMS의 포럼에 남아있는 비트 좋은 아코디언 플러그인을 가지고있다. 현재 나의 예제는 '활성'(스타일 보라색)이 닫힐 때 이상하게 작동합니다. .click 및 .toggle 처리기가 실행 중이지만 해결 방법을 모르겠다 고 가정합니다. .toggle을 제거하려고 시도했습니다. 클릭 한 번으로 클릭 한 것뿐만 아니라 모든 요소에 영향을주는 것 같습니다. 그러나 완전히 혼란 스럽지만 .click 이벤트에서 두 번째 (빈) 조건부가 필요하고 비어있을 수있는 두 번째 토글 명령이 필요합니다. 분명히이 코드는 backflips를하고 있으며 더 깨끗한 방법이 있습니다.보고에 대한 많은 감사 - BTW – orionrush

+0

단, 나는 당신의 제안을 이해하지 못하는거야 - 내가 일을 읽고 있어요으로 expandingMenu (0) 준비 문서에 - 그리고 그것은 외부에서로드 expandingMenu 함수를 호출합니다. 이 두 함수가 어떻게 작동하는지 명확히 알 수는 없지만 메뉴 (0)는 외부 스크립트에 메뉴 순서 num을 전달합니다. 그러나 왜 필요한지 확실하지 않습니다. 전혀 필요하지 않다는 말씀인가요? 왜 누군가가 그러한 접근 방식을 취했습니까? – orionrush

+0

동의합니다. 불필요한 것처럼 보입니다. 그들의 시작 표시는 문서 및 CSS에 의해 처리되어야합니다. 나는 그저 당신에게 그것이 무엇을하고 있었는지 알려주고있었습니다 - 그것은 완전히 불필요하게 보입니다. –

관련 문제