2012-03-13 85 views
0

我有問題,我的菜單下拉菜單,不知道爲什麼。下面是HTML:Jquery - ul slidedown slideup

<ul> 
          <li> 
           <font style="font-size: 12px;"><a href="?id=1" class="links">Quartos e Suites</a></font> 
           <img src="imgs/DownArrow.gif" class="arrowup" style="width:13px;height:13px"> 
           <ul class="submenu"> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Presidencial</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Executiva</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Junior</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Quarto Superior</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Quarto Standart</a></font></li> 
           </ul> 
          </li> 
          <li> 
           <font style="font-size: 12px;"><a href="?id=2" class="links">Restaurante e Bar</a></font> 
           <img src="imgs/DownArrow.gif" class="arrowup" style="width:13px;height:13px"> 
           <ul class="submenu"> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Presidencial</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Executiva</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Suite Junior</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Quarto Superior</a></font></li> 
            <li><font style="font-size: 12px;"><a href="?id=1" class="links">Quarto Standart</a></font></li> 
           </ul> 
          </li> 

         </ul> 

和jQuery的:

$('.arrowup').click(function(){   
    var menu = $(this).next('ul'); 
    var thisimage = $(this); 
     //check if is any open and close 
     allmenu = $('.submenu:visible'); 
     if(allmenu.size() != 0){ 
      allmenu.slideUp(function(){ 
       $(this).prev('img').attr('src', 'imgs/DownArrow.gif'); 
       //check is the one is closing is not the one clicked 
       if($(this).not(menu)){ 
        menu.slideDown(function(){ 
      thisimage.attr('src', 'imgs/UpArrow.gif');  
     }); 
       }  
     }); 
     }else{ 
     //open the one clicked 
     alert(3); 
     $(this).next('ul').slideDown(function(){ 
      thisimage.attr('src', 'imgs/UpArrow.gif');  
     }); 
     } 
}); 

當一個是開放的點擊關閉這裏的主要問題是,它關閉和打開。 錯誤在這裏:if($(this).not(menu))。但不知道爲什麼。

問候

回答

0

可能取代這個代碼:

  if($(this).not(menu)){ 
       menu.slideDown(function(){ 
     thisimage.attr('src', 'imgs/UpArrow.gif');  
    }); 
      }  

與此:

   menu.not(this).slideDown(function(){ 
     thisimage.attr('src', 'imgs/UpArrow.gif');  
    }); 

解釋: 「not」 採用一組元素,過濾器,然後返回一個新的不匹配選擇器,參考或函數的元素集。在if語句中測試這些元素是沒有意義的和無用的。 jQuery元素集合基本上是一個奇特的數組,當轉換爲布爾值時,所有Javascript中的數組都被視爲true,即使它們是空的。

0

好的,當你測試是否有任何子菜單打開,你應該關閉它們,所以if語句if ($(this).not(menu))和內部代碼應該被刪除。

PS:如果menu打開和存儲測試:從jQuery的網站,.not()方法返回一個jQuery對象,那麼,如果是錯誤的說法,由於它始終是真實的......

你應該做的是它變成一個變量,然後關閉所有打開的子菜單,然後如果opened是假的,打開menu

+0

我終於完成它 – macieira 2012-03-14 21:32:24

+0

祝賀:] – 2012-03-15 03:16:04

0
$('.arrowup').click(function(){   
    var menu = $(this).next('ul'); 
    var thisimage = $(this); 
     //check if is any open and close 
     allmenu = $('.submenu:visible'); 
     if(menu.is(':visible')){ 

     }else{ 
      if(allmenu.size() != 0){    
       allmenu.slideUp(function(){ 
        $(this).prev('img').attr('src', 'imgs/DownArrow.gif'); 
        menu.slideDown();  
       }); 

      }else{ 
       //open the one clicked 
       $(this).next('ul').slideDown(function(){ 
        thisimage.attr('src', 'imgs/UpArrow.gif');  
       }); 
      } 
     }  
});