2009-05-06 2 views
0

Если я нажимаю на текущий элемент, он должен включать и выключать и закрывать все остальные , если он открыт. Когда я нажимаю на меню1, он просто держится открытым. Я хочу использовать такие функции, как когда он открыт, он должен закрываться, когда он закрывается, он должен открыться. Пожалуйста, смотрите URLМеню jQuery toggle не работает

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 

     $(".toggle_container").hide(); 

     $("li.trigger").click(function() { 
      $(".toggle_container").hide(); 
      $(this).next(".toggle_container").slideToggle("slow,"); 
      $("li.trigger").removeClass("active"); 
      $(this).addClass("active"); 
      return false; 
     }); 

    }); 
</script> 
<ul> 
    <li class="trigger" id="t1">Menu 1</li> 
    <li class="toggle_container">Menu 1 content</li> 
    <li class="trigger" id="t2">Menu2</li> 
    <li class="toggle_container">Menu2 content</li> 
    <li class="trigger" id="t3">Menu3</li> 
    <li class="toggle_container">Menu3 content</li> 
</ul> 
+0

В чем ваш вопрос? –

ответ

0

я не уверен, что ваш вопрос, но я вижу, лишняя запятая в конце третьей строки кода (...slideToggle("slow,")). Вероятно, этого не должно быть.

EDIT: После проверки предоставленного url теперь я вижу, в чем проблема. Во-первых, вы должны добавить новый стиль для .toggle_container класса:

li.toggle_container { display: none; } 

Это предотвращает первоначальное отображение подменю. Затем вы должны принять во внимание внутри вашего скрипта Jquery, если вы нажмете на активной или неактивной ссылке:

$(document).ready(function() { 
    $("li.trigger").click(function() { 
     $(this).next(".toggle_container").slideToggle("slow"); 
     if (!$(this).hasClass("active")) { 
      $(".toggle_container").hide(); 
      $(".active").toggleClass("active"); 
      $(this).toggleClass("active"); 
     } 
     return false; 
    }); 
}); 

И это все.

+0

Посмотрите на URL-адрес: http://207.210.64.138/~paglaso/jquery/toggle.php Что я хочу, когда я нажимаю на меню, которое он должен открывать и закрывать. На данный момент он просто открывается. Первоначально он использовался для открытия и закрытия .... мне пришлось закрыть все остальные открытые меню, добавив $ (". Toggle_container"). Hide(); в элементе списка onclick. – 2009-05-06 21:18:21

+0

Я обновил свой ответ на основе кода за предоставленным URL. Это должно сработать. –

0

Попробуйте это на свой код,

$("selector").addClass("class").siblings().removeClass("class"); 
or 
$("selector").slideToggle("slow").siblings().hide("slow"); 
0

Вы можете просто расширить JQuery с toggleClass, как показано ниже:

//extend jquery 
(function($) { 
    $.fn.toggleClass = function(check, replace) { 
     return this.each(function() { 
      if ($(this).hasClass(check)) { 
       $(this).removeClass(check); 
       $(this).addClass(replace); 
      } else { 
       if ($(this).hasClass(replace)) 
        $(this).removeClass(replace); 
       $(this).addClass(check); 
      } 
     }); 
    }; 
})(jQuery); 

Так что вы можете делать такие вещи, как это:

<input type="button" value="Toggle" 
onclick="$('#myDiv').toggleClass('expanded','collapsed')"/> 
0

Вот несколько более простое решение:

$(function(){ 
    $(".toggle_container").hide(); 
    $("li.trigger").click(function(){ 
    $(".toggle_container").not($(this).next()).hide(); 
    $(this).addClass("active").next(".toggle_container").slideToggle("slow") 
      .end().siblings().removeClass("active"); 
    }); 
}); 

Обратите внимание, что единственное, что нужно для исправления вашего исходного кода, - это исключить скрытый элемент, который должен быть скрыт, поэтому переключатель работает правильно (он всегда скрывался перед переключением, поэтому переключатель всегда был «показом») , вы делаете это, добавляя .not() следующим образом:

$(".toggle_container").hide(); 
$(".toggle_container").not($(this).next()).hide(); 
Смежные вопросы