6

jqueryのクリックイベントでサブメニューを表示するメインメニューがあります(クライアントはホバーの代わりにクリックしたかったので)、それが機能しましたが、まだ1つのことがわかりません:メニューとサブメニューが正しく機能しているので「ニュース」をクリックするとサブメニューがうまくスライドし、「ニュース」をクリックして戻ると閉じますが、ニュースのサブメニューを開いて「リソース」をクリックすると、それぞれのサブメニューが表示されますが、ニュースのサブメニューは開いたままです。別のメニュー項目をクリックしたとき、またはメイン メニュー領域の外側をクリックしたときに、前のサブメニューを閉じたいですか? ここに私が得たものがあります:

<ul id="MainMenu">
        <li><a href="#">Home</a></li>
        <li><a href="#">About Us</a></li>
        <li>
              <a href="#">News</a>
              <ul class="noJS">
                <li><a href="#">sub menu 1</a></li>
                <li><a href="#">sub menu 2</a></li>
                <li><a href="#">sub menu 3</a></li>
                <li><a href="#">sub menu 4</a></li>
                <li><a href="#">sub menu 5</a></li>
                <li><a href="#">sub menu 6</a></li>
            </ul>                         
        </li>
        <li><a href="#">Jobs</a></li>
        <li><a href="#">Contact Us</a></li>
        <li><a href="#">Admin</a></li>
        <li>
            <a href="#">Resources</a>
            <ul class="noJS">
                <li><a href="#">sub menu 1</a></li>
                <li><a href="#">sub menu 2</a></li>
                <li><a href="#">sub menu 3</a></li>
                <li><a href="#">sub menu 4</a></li>
                <li><a href="#">sub menu 5</a></li>
                <li><a href="#">sub menu 6</a></li>
            </ul>
        </li>
        <li class="lastChild"><a href="#">New Button</a></li>
    </ul>

そしてjquery:

    $(function(){
$('#MainMenu').find('> li').click(function(){
    $(this).find('ul')
    .stop(true, true).slideToggle(400); 
    return false;       
});    
});
4

2 に答える 2

8

このようなことを試してください

$(function() {
    $('#MainMenu > li').click(function(e) { // limit click to children of mainmenue
        var $el = $('ul',this); // element to toggle
        $('#MainMenu > li > ul').not($el).slideUp(); // slide up other elements
        $el.stop(true, true).slideToggle(400); // toggle element
        return false;
    });
    $('#MainMenu > li > ul > li').click(function(e) {
        e.stopPropagation();  // stop events from bubbling from sub menu clicks
    });
});​

http://jsfiddle.net/Ssu32/

于 2012-11-13T16:17:39.340 に答える
3

この行をコードに追加するだけです

$('#MainMenu > li').not(this).find('ul').slideUp();

フルコード

$('#MainMenu').find('> li').click(function() {
    $('#MainMenu > li').not(this).find('ul').slideUp();
    $(this).find('ul').stop(true, true).slideToggle(400);
    return false;
});​

フィドルをチェック

于 2012-11-13T16:50:07.573 に答える