2012-04-12 7 views
0

私は現在この次のスクリプトを使用してドロップダウンメニューを操作しています。ユーザーがメニュー項目をクリックしたときにドロップが現れ、メニューが消えてしまいましたが、メニュー項目を再度クリックしてドロップダウンを消すための機能を追加する方法については疑問に思っていました。これは実装が難しいですか?私はアイブが誤ってまたは多分上書き何かでそれを果たしたと仮定してイムは、エラーを取得しますがクリック時にjqueryドロップダウンスクリプトにhide関数を追加する

/* function to show menu when clicked */ 
dropdown.bind('click',function(e) { 
    if (!dropdown.data('open')) { 
    dropdown.data'(open', true); 
    // open menu 
    } else { 
    dropdown.data('open', false); 
    // close menu 
    } 

}); 

:ここ

$(document).ready(function() { 
    /* for keeping track of what's "open" */ 
    var activeClass = 'dropdown-active', showingDropdown, showingMenu, showingParent; 
    /* hides the current menu */ 
    var hideMenu = function() { 
     if(showingDropdown) { 
      showingDropdown.removeClass(activeClass); 
      showingMenu.hide(); 
     } 
    }; 

    /* recurse through dropdown menus */ 
    $('.dropdown').each(function() { 
     /* track elements: menu, parent */ 
     var dropdown = $(this); 
     var menu = dropdown.next('div.dropdown-menu'), parent = dropdown.parent(); 
     /* function that shows THIS menu */ 
     var showMenu = function() { 
      hideMenu(); 
      showingDropdown = dropdown.addClass('dropdown-active'); 
      showingMenu = menu.show(); 
      showingParent = parent; 
     }; 
     /* function to show menu when clicked */ 
     dropdown.bind('click',function(e) { 
      if(e) e.stopPropagation(); 
      if(e) e.preventDefault(); 
      showMenu(); 
     }); 
     /* function to show menu when someone tabs to the box */ 
     dropdown.bind('focus',function() { 
      showMenu(); 
     }); 
    }); 

    /* hide when clicked outside */ 
    $(document.body).bind('click',function(e) { 
     if(showingParent) { 
      var parentElement = showingParent[0]; 
      if(!$.contains(parentElement,e.target) || !parentElement == e.target) { 
       hideMenu(); 
      } 
     } 
    }); 
}); 

は、以下の回答に基づいて、私の試みですか?これは、この答えで編集された唯一のセクションですので、上のコードのセクションです。あなたは何ができるか

おかげ

答えて

0

はjQuery.data()を使用し、状態に応じて、trueまたはfalseである例えばオープンという変数を持っています。だから、あなたはこのようなことができます。

if (!dropdown.data('open')) { 
dropdown.data'(open', true); 
// open menu 
} else { 
dropdown.data('open', false); 
// close menu 
} 
+0

ここで私はこれを配置しますか?それはクリック機能の一部ですか? – Doidgey

+0

はい、内部でイベントハンドラ/機能をクリックします。初めてそれはdelcaredされないので、それを開き、それを真と宣言して、2回目にそれを閉じてfalseに戻すことができます。 – GillesC

+0

私は、私の試みを含めるために質問を編集するつもりです、あなたはそれを見渡すことができます、私はjquery吸う私のスキルを痛みになることは申し訳ありません。 – Doidgey

関連する問題