레이어 클릭시 나머지 모든 레이어 감추는 방법 궁금합니다.
현재 펼쳐지는 faq 게시판 작업중인데 자바스크립트에 대해 궁금한게 있습니다.
작업중인 faq 게시판은 모든 카테고리를 나열하고 각 카테고리 항목안에 해당되는 게시물들이 나열되는 방식입니다.
<tr>
<td>
<a href="javascript:clickshow('<?=$k?>','<?=$i?>')"><?=$row[wr_subject]?></a>
</td>
</tr>
<tr id="block<?=$K?>_<?=$i?>" style="display:none">
...
</tr>
$K 는 카테고리 번호, $i 는 게시물 번호 입니다.
스크립트는
<script language="javascript">
<!--
function clickshow(num,cnt) {
content=eval("document.all.block"+num+"_"+cnt+".style");
if (content.display=="block") {
content.display="none";
} else {
content.display="block";
}
}
//-->
</script>
이렇게 해놨습니다.
잘 작동은 되지만 여러 게시물이 펼쳐지면 정신없어서 한 게시물을 클릭하면 나머지 모든 레이어는 감추게 처리하고 싶습니다. 각 카테고리별로 게시물 수가 제각각이라서 어떻게 해야할지 난감합니다.
작업중인 faq 게시판은 모든 카테고리를 나열하고 각 카테고리 항목안에 해당되는 게시물들이 나열되는 방식입니다.
<tr>
<td>
<a href="javascript:clickshow('<?=$k?>','<?=$i?>')"><?=$row[wr_subject]?></a>
</td>
</tr>
<tr id="block<?=$K?>_<?=$i?>" style="display:none">
...
</tr>
$K 는 카테고리 번호, $i 는 게시물 번호 입니다.
스크립트는
<script language="javascript">
<!--
function clickshow(num,cnt) {
content=eval("document.all.block"+num+"_"+cnt+".style");
if (content.display=="block") {
content.display="none";
} else {
content.display="block";
}
}
//-->
</script>
이렇게 해놨습니다.
잘 작동은 되지만 여러 게시물이 펼쳐지면 정신없어서 한 게시물을 클릭하면 나머지 모든 레이어는 감추게 처리하고 싶습니다. 각 카테고리별로 게시물 수가 제각각이라서 어떻게 해야할지 난감합니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 5개
$('tr').filter(function () { return /block[0-9]*_[0-9]*/.test(this); }).hide();
$('#block'+num+'_'+cnt).show();
}
제가 머리쥐어짜서 만든거예요 ^^
테스트해보세요... [테스트는 못해봣어요 ㅜ<정규식부분이 이상하지만..]
[그냥 덧글답변만 하시면 확인못할수잇으니 쪽지도 부탁드립니다]
활동지수가 낮다고 쪽지보내기가 안되네요 ㅠㅠ
일단 해당 레이어 펼쳐지기는 잘되는데 감춰지기 아무것도 먹히질 않습니다.
현재 일단은 무식하게 각 카테고리별로 게시물의 총 수를 체크하여
$list_cnt0 ~ $list_cnt7 에 넣어서 (카테고리가 현재는 7개입니다.)
임시방편으로
function clickshow(num,cnt) {
var k = 0;
for (j=0; j<<?=count($arr)?>; j++) {
if (j==0) k=<?=$list_cnt0?>;
else if (j==1) k=<?=$list_cnt1?>;
else if (j==2) k=<?=$list_cnt2?>;
else if (j==3) k=<?=$list_cnt3?>;
else if (j==4) k=<?=$list_cnt4?>;
else if (j==5) k=<?=$list_cnt5?>;
else if (j==6) k=<?=$list_cnt6?>;
else if (j==7) k=<?=$list_cnt7?>;
for (i=0; i<k; i++) {
content=eval("document.all.block"+j+"_"+i+".style");
if (j==num && i==cnt) {
if (content.display=="block") {
content.display="none";
} else {
content.display="block";
}
} else {
content.display="none";
}
}
}
}
요렇게 해놨습니다. ㅠㅠ 되기는 하는데 카테고리수가 변하면 스크립트를 계속 수정해야하니...
자바스크립트는 어느정도는 이해할 수 있을정도(위에서처럼 무식하게 나열하는정도 ㅠㅠ)인데 제이퀘리는 많이 다르네요.
두번째꺼로 적용했습니다. 위에 적어주신거와 한끝차이였는데... 제가 좀 알았다면 이것저것 시도하다 해결했을수도 있었을텐데... 견해님 시간을 이중으로 뺒었네요 ㅠㅠ
덕분에 코드가 무지 간결해졌는데 어찌 감사의 말씀을 드려야 할지...
정말 감사드립니다.
var old_obj=null;
function clickshow(num,cnt) {
content=eval("document.all.block"+num+"_"+cnt+".style");
if (content.display=="block") {
content.display="none";
} else {
content.display="block";
if(old_obj !=null && old_obj !=content) old_obj.display='none';
old_obj=content;
}
}
저번에도 mb_nick 넘기던거 mb_no 로 넘기라고 중요한 지적해주셔서 큰 도움 됐었는데 이번에도 새로운 가르침 주셔서 감사합니다.
처음 올렸던 원문 스크립트에 몇가지를 덧붙여 주셔서 자바스크립트 이해하고 공부하는데 넘 도움이 됩니다.
잘 작동됩니다. 앞서 열린 object를 이런식으로 기억시킬수도 있는거군요. 아직 산수정도 수준의 스크립트만 알아가는 중이라 버벅거리지만 덕분에 또 배워갑니다.
감사합니다.
var old_obj=null;
...
if(old_obj !=null && old_obj !=content) old_obj.display='none';
old_obj=content;
null을 이렇게 간단히 처리하면 되는군요. 안그래도 null 문제를 어떻게 해결하나 궁금했었는데. 감사합니다.