We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 50791
    • 2 Posts
    Здравствуйте!
    Подскажите, есть меню accordion. При нажатии на пункт меню открывается подменю. Что надо дописать в скрипт чтобы при нажатии на другой пункт активный закрывался. Сейчас они все открываются, приходится закрывать по клику. Вот ссылка http://tun.fit33.ru/, (каталог). Вот сам скрипт:
    /*
     * jQuery UI Multilevel Accordion v.1
     * 
     * Copyright (c) 2011 Pieter Pareit
     *
     * http://www.scriptbreaker.com
     *
     */
    
    //plugin definition
    (function($){
        $.fn.extend({
    
        //pass the options variable to the function
        accordion: function(options) {
            
    		var defaults = {
    			accordion: 'true',
    			speed: 300,
    			closedSign: '[+]',
    			openedSign: '[-]'
    		};
    
    		// Extend our default options with those provided.
    		var opts = $.extend(defaults, options);
    		//Assign current element to variable, in this case is UL element
     		var $this = $(this);
     		
     		//add a mark [+] to a multilevel menu
     		$this.find("li").each(function() {
     			if($(this).find("ul").size() != 0){
     				//add the multilevel sign next to the link
     				$(this).find("a:first").append("<span>"+ opts.closedSign +"</span>");
     				
     				//avoid jumping to the top of the page when the href is an #
     				if($(this).find("a:first").attr('href') == "#"){
     		  			$(this).find("a:first").click(function(){return false;});
     		  		}
     			}
     		});
    
     		//open active level
     		$this.find("li.active").each(function() {
     			$(this).parents("ul").slideDown(opts.speed);
     			$(this).parents("ul").parent("li").find("span:first").html(opts.openedSign);
     		});
    
      		$this.find("li a").click(function() {
      			if($(this).parent().find("ul").size() != 0){
      				if(opts.accordion){
      					//Do nothing when the list is open
      					if(!$(this).parent().find("ul").is(':visible')){
      						parents = $(this).parent().parents("ul");
      						visible = $this.find("ul:visible");
      						visible.each(function(visibleIndex){
      							var close = true;
      							parents.each(function(parentIndex){
      								if(parents[parentIndex] == visible[visibleIndex]){
      									close = false;
      									return false;
      								}
      							});
      							if(close){
      								if($(this).parent().find("ul") != visible[visibleIndex]){
      									$(visible[visibleIndex]).slideUp(opts.speed, function(){
      										$(this).parent("li").find("span:first").html(opts.closedSign);
      									});
      									
      								}
      							}
      						});
      					}
      				}
      				if($(this).parent().find("ul:first").is(":visible")){
      					$(this).parent().find("ul:first").slideUp(opts.speed, function(){
      						$(this).parent("li").find("span:first").delay(opts.speed).html(opts.closedSign);
      					});
      					
      					
      				}else{
      					$(this).parent().find("ul:first").slideDown(opts.speed, function(){
      						$(this).parent("li").find("span:first").delay(opts.speed).html(opts.openedSign);
      					});
      				}
      			}
      		});
        }
    });
    })(jQuery);


    Спасибо!

    This question has been answered by alexanderkx. See the first response.

    • discuss.answer
      • 50788
      • 3 Posts
      На скорую руку вышло нечто такое:

      замените else, которая на 80-й строке идет else { ... }

      else{
      
                            $this.find("li.active").each(function() {
                            $(this).parents("ul:first").slideUp(opts.speed);              
                            $(this).parents("ul:first").parent("li").find("span:first").html(opts.closedSign);
      
                          });
      
                             
      
                              $(this).parent().find("ul:first").slideDown(opts.speed, function(){
                               $(this).find("li").addClass("active");
                                $(this).parent("li").find("span:first").delay(opts.speed).html(opts.openedSign);
                            });
                        }
        • 50791
        • 2 Posts
        Quote from: alexanderkx at Jul 22, 2015, 06:20 AM
        На скорую руку вышло нечто такое:

        замените else, которая на 80-й строке идет else { ... }

        else{
        
                              $this.find("li.active").each(function() {
                              $(this).parents("ul:first").slideUp(opts.speed);              
                              $(this).parents("ul:first").parent("li").find("span:first").html(opts.closedSign);
        
                            });
        
                               
        
                                $(this).parent().find("ul:first").slideDown(opts.speed, function(){
                                 $(this).find("li").addClass("active");
                                  $(this).parent("li").find("span:first").delay(opts.speed).html(opts.openedSign);
                              });
                          }

        Спасибо, все получилось!!!