2012-07-01 3 views
0

jquery를 사용하여 간단한 탐색 메뉴를 만들려고합니다. 여기에서 li 중 하나를 가리키면 하위 ul li가 아래로 슬라이드됩니다. slideToggle()을 사용하여 작업 할 수는 있지만 슬라이드가 작동하는 것은 불가능합니다. (나는 클릭으로 디버깅을하고 있었지만 마우스를 가져 가면된다.) 자바 스크립트 :Jquery sliding ul li

<script type="text/javascript"> 
    // Wait for the page and all the DOM to be fully loaded 
    $(document).ready(function() { 
     // Add the 'hover' event listener to our drop down class 
     $(".dropdown").click(function() { 
      // When the event is triggered, grab the current element 'this' and 
      // find it's children '.sub_navigation' and display/hide them 
      //$(this).find('.sub_navigation').slideToggle(); 
      $(this).find(".sub_navigation").show("slide", { direction: "left" }, 1000); 
     }); 
    }); 
</script> 

CSS

ul { 
    margin:0; 
    padding:0; 
    list-style-type:none; 
    min-width:200px; 
} 
ul#navigation { 
    float:left; 
} 
ul#navigation li { 
    float:left; 
    border:1px black solid; 
    min-width:200px; 
} 
ul.sub_navigation { 
    position:absolute; 
    display:none; 
    overflow: hidden; 
} 
ul.sub_navigation li { 
    clear:both; 
    margin-left: 9999px; 
    float: left; 
} 
a,a:active,a:visited { 
    display:block; 
    padding:10px; 
} 

목록

<div id="menu"> 
    <ul id="navigation"> 
     <li class="dropdown"><a href="javascript:ajaxpage('home.php', 'body');">Home</a></li> 
     <li class="dropdown"><a href="javascript:ajaxpage('projects.php', 'body');">Projects</a> 
      <ul class="sub_navigation"> 
       <!-- pull projects with P H P --> 
       <?php 
        require('config/config.php'); 
        //pull all data from projects table 
        $result = mysql_query("SELECT * FROM projects") or die('Unable to query!'); 
        $num_results = mysql_num_rows($result); 
        //make sure there is at least 1 project 
        if ($num_results > 0) { 
          //loop to catch each project in database 
          while ($row = mysql_fetch_array($result)) { 
          //return in list each project name 
          ?> 
          <li><a href="openproject.php?id=<? echo $row['id']; ?>"><? echo $row['name']; ?></a></li> 
          <?php 
          }        
        } else { 
        //return to add a project 
        ?> 
        <li><a href="createproj.php">Add a project</a></li> 
        <?php 
        } 
        ?> 
       </ul> 
      </li> 
      <li class="dropdown"><a href="javascript:ajaxpage('pubfiles.php', 'body');">Public Files</a></li> 
      <li class="dropdown"><a href="javascript:ajaxpage('users.php', 'body');">Users</a></li> 
      <li class="dropdown"><a href="javascript:ajaxpage('settings.php', 'body');">Settings</a></li> 
      <!-- only pull if admin and logged in per P H P session--> 
      <li class="dropdown"><a href="javascript:ajaxpage('admin.php', 'body');">Admin</a></li> 
     </ul> 
    </div> 

답변

0

show()에 대한 코드는 잘못된 서명이 있습니다 http://api.jquery.com/show/

이 될 수 있습니다 :
.show()
또는
.show(duration [, callback])
또는 경우 .show([duration] [, easing] [, callback])


, 당신이 할 수있는를 사용하십시오.가로 슬라이드 :

$(this).find(".sub_navigation").animate({ width: "toggle" }, 1000); 

편집 : 당신이 jQuery를 UI 효과를 사용하는 경우
Althrough, 구문이 정확합니다. jQuery UI .js 파일이 페이지에 포함되어 있고이 파일이 효과 모듈로 작성되었는지 확인하십시오.

+0

http://docs.jquery.com/UI/Effects/Slide 나는 이것을 근거로 설명했다. – Grant

+0

페이지에 효과 모듈로 빌드 된 jQuery UI js를 포함 시켰습니까? 이는 jQuery UI 효과에만 적용됩니다. 나는 편집을 미쳤다. – rcdmk

+0

jquery.effects.core, effects.slide, ui.core가 포함되어 있습니다. 나는 앞서 가서 애니메이트 대신에 조언을 구했는데 작동하고 있습니다. 목록을 다시 표시하여 막대로 표시되도록하십시오. 위쪽/아래쪽 대신 ul li에 대한 채우기를 만드는 방법에 대한 아이디어가 있습니까? jquery를 처음 사용하기 때문에 슬라이드를 사용하려면 js를 포함시켜야합니까? – Grant

1

이 시도 :

.show ([시간] [완화] [콜백])

$(".dropdown").hover(function() { 
     $(this).find(".sub_navigation").show("slow"); 
     //or $(this).find(".sub_navigation").slideDown(); 
    },function() { 
     $(this).find(".sub_navigation").hide('slow');  
     // or $(this).find(".sub_navigation").slideUp(); 
}); 
+0

또는이'$ (this) .find (". sub_navigation"). slideToggle()'은 (is : ': visible') 안에 잠길 수 있습니다. 숨기기 전에 보이는지 확인하십시오. . ':)' –

+1

@Tats_innit 고맙습니다. :). 예, 그는'$ (this) .find ('. sub_navigation')를 사용했습니다. slideToggle(); ' – undefined

+0

왼쪽이나 오른쪽에서 나타나야합니다. slideToggle은 작동하지만, 내가 아는 한 위아래입니다. ul li의 메인 탐색 바 아래에 하위 막대를 만들려고합니다. – Grant