• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mobiles Menü

The_C

Member
Hallo,
ich habe ein Problem mit meinem Mobilem Menü...
Jedes mal wenn ich in ein Untermenü klicke schließt sich das menü nach ca. 1 sec.
Ich verstehe das nicht weil ich ja schon ein e.preventDefault(); in das zuständige Tag eingesetzt habe.
PHP:
$(".select-menu>a").click(function(e) { 
  e.preventDefault();
  $("#mobile-only-menu").slideToggle("slow", "easeInOutExpo"); 
});
Kann mir da bitte jemand weiterhelfen ich hab mittlerweile keinen Plan mehr woran das liegen könnte.
Hier mal die Seite um die es sich dreht, einfach das Fenster soweit verkleinern bis das Mobile Menü auftaucht und dann beim 2ten Plus Zeichen das Menü aufklappen.
Danke schon mal jetzt für Eure Hilfe!

Und Hier noch der verwendete Code die das komplette Menü ansteuert:
Das mobile Menü wird von der Zeile 52 bis 77 angesprochen
PHP:
jQuery(window).load(function(e) {
	/*superfish pull-down menu*/
	jQuery('ul.sf-menu').supersubs
	({
		minWidth:6,
		maxWidth:25,
		extraWidth:1
	}).superfish({
		animation:
		{
			opacity: 'show'
		},
		dropShadows:false,
		delay:500,
		speed:'fast',
		disableHI:true,
		animation:
		{
			opacity: 'show'
		}
	});			

	var enable_lavalamp = true;
	
	/*ie8 check*/
	/*
	if (jQuery.browser.msie  && parseInt(jQuery.browser.version, 10) <= 8) 
		enable_lavalamp = false;
	*/
	if (enable_lavalamp) {
		var _startItem = jQuery('ul#top_menu .current-menu-ancestor').index() >= 0 ? jQuery('ul#top_menu .current-menu-ancestor').index() : jQuery('ul#top_menu .current-menu-item').index();	
		
		/*there are empty <li> tags half of the position of the current item*/
		_startItem = (_startItem / 2);
		
		/*Initialize Lava Lamp*/
		jQuery('ul#top_menu').lavaLamp
		({
			target:'li.rc:not(li li)', 
			container: 'li', 
			startItem : _startItem, 
			setOnClick:false, 
			fx: 'easeOutBounce', 
			speed: 500,
          returnDelay: 1500,
			returnHome:true, 
		});
	}
});


(function($) {

	$(document).ready(function(e) {
		
		
	
		/*Hover Simulation for Mobile Devices*/ 
		$(document).on( "click touchstart", "a", function() { 
			$(this).toggleClass("hover"); 
		});
			
		/*jQuery Mobile menu*/
		if($("#top_menu").length>0) {	
			var $mobile_menu = jQuery( $("#top_menu").html().split('<li class="notrc"> </li>').join('') );
			$mobile_menu.removeAttr("id").removeAttributes(['id', 'class']);	
			$("#mobile-only-menu").append( $mobile_menu ).accordion().hide();
			
			$(".select-menu>a").click(function(e) { 
  				e.preventDefault();
  				$("#mobile-only-menu").slideToggle("slow", "easeInOutExpo"); 
			});
		}
		
	});

})( jQuery );

jQuery.fn.removeAttributes = function(only, except) {
    
    if (except) {
        except = jQuery.map(except, function(item) {
            return item.toString().toLowerCase();
        });
        if (only) {
            only = jQuery.grep(only, function(item, index) {
                return jQuery.inArray(item, except) == -1;
            });
        };
    };
    return this.each(function() {
        var attributes;
        if(!only){
            attributes = jQuery.map(this.attributes, function(item) {
                return item.name.toString().toLowerCase();
            });
             if (except) {
                attributes = jQuery.grep(attributes, function(item, index) {
                    return jQuery.inArray(item, except) == -1;
                });
            };
        } else {
            attributes = only;
        }      
        var handle = jQuery(this);
        jQuery.each(attributes, function(index, item) {
            handle.removeAttr(item);
        });
    });
};
 
Nachstellen kann ich das ebenfalls nicht.

Hast du eventuell schon etwas verändert? Ansonsten wären weitere Infos hilfreich (z.B. Browser).
 
JA hab ich, aber jetzt funktionieren die Links nicht mehr?

NEU:
PHP:
(function($) {
	$(document).ready(function(e) {
			
		/*Hover Simulation for Mobile Devices*/ 
		/*
		$(document).on( "click touchstart", "a", function() { 
			$(this).toggleClass("hover"); 
		});
		*/
		$(document).on( "click touchstart", "a", function() { $(this).toggleClass("hover"); })
			
		/*jQuery Mobile menu*/
		if($("#top_menu").length>0) {	
			var $mobile_menu = jQuery( $("#top_menu").html().split('<li class="notrc"> </li>').join('') );
			$mobile_menu.removeAttr("id").removeAttributes(['id', 'class']);	
			$("#mobile-only-menu").append( $mobile_menu ).accordion().hide();

			$(".select-menu a").click(function(e) { 
  				e.preventDefault();
  				//e.stopPropagation();
  				$("#mobile-only-menu").slideDown("slow", "easeInOutExpo");
			});

			/*
			$(".select-menu a").click(function() {
				$("#mobile-only-menu").slideToggle("fast", "easeInOutExpo");
			});
			*/
		}		
	});
})( jQuery );
});
ALT:
PHP:
(function($) {

	$(document).ready(function(e) {
		
		
	
		/*Hover Simulation for Mobile Devices*/ //.flickr-badge-wrapper 
		$("a").each(function(index, element) {
            /*$(this).live("touchstart", function(){ $(this).addClass("hover"); });
			$(this).live("touchend"	, function(){ $(this).removeClass("hover"); });*/
			$( document ).on( "click", "touchstart", function() { $(this).addClass("hover"); });
			$( document ).on( "click", "touchend", function() { $(this).removeClass("hover"); });
        });
			
		/*jQuery Mobile menu*/
		if($("#top_menu").length>0) {	
			var $mobile_menu = jQuery( $("#top_menu").html().split('<li class="notrc"> </li>').join('') );
			$mobile_menu.removeAttr("id").removeAttributes(['id', 'class']);	
			$("#mobile-only-menu").append( $mobile_menu ).accordion().hide();
			$(".select-menu>a").click(function() {
				$("#mobile-only-menu").slideToggle("fast", "easeInOutExpo");
			});
		}
		
	});

})( jQuery );

Weis jetzt nicht mehr weiter weil es mit .slideToggle nicht funktioniert und $(".select-menu a") und .slideDown verschwindet es nicht???
Ah ja Browser... sollte überall der gleiche Effekt sein MAC und Win alle Browser das Mobile Menü lässt sich jetzt öffen und auch die Untermenüs aber ist funktionslos weil man keine Links anklicken kann.
Hier noch die Seite: Seite
 
Zuletzt bearbeitet:
Ich würde für das "+" in deinem Menü ein separates Element machen, auf dem du dann das onclick registrierst, das das Untermenü anzeigt und ein e.preventDefault() und e.stopPropagation() enthält. Würde dein Problem viel einfacher machen...
 
Hallo kkapsner,
Danke für Deine Hilfe, aber leider verstehe ich nicht was Du meinst welches "+" ?
Kannst mir nicht bitte ein Beispiel mit meinem Code geben...
Danke!
 
Ahhh... OK jetzt verstehe ich das "+" wer lesen kann ist klar im Vorteil ;-)
OK aber leider bin ich kein JS Experte so wie Du das ich das einfach mal alleine machen kann...
Bitte kannst mir erklären wie man so etwas macht?
Geht es um diese Zeile:
PHP:
$(".select-menu>a").click(function() {
	$("#mobile-only-menu").slideToggle("fast", "easeInOutExpo");
});
Das "+" befindet sich im a href und in der CSS Klasse #mobile-only-menu a und das verstehe ich nicht wie ich alleine das "+" anspreche.
 
jetzt wird das noch schneller zugemacht aber die Links funktionieren hab damit echt probleme ich verstehe das nich.
PHP:
$( ".select-menu > a" ).on( "click mobile-only-menu a", function(e) { 
	console.log('Es wurde geklickt');
	e.preventDefault()
	$("#mobile-only-menu").slideToggle("fast", "easeInOutExpo");
});
$( "#mobile-only-menu" ).on( "click a", function(e) { 
	console.log('Es wurde geklickt');
	$("ul li").slideToggle("fast", "easeInOutExpo");
	e.stopPropagation()
});
 
Wenn das Menü langsamer gehen soll, musst du anstelle von fast einfach slow nehmen. (Also beim slideToggle)

Das + könntest du z.B. in ein span Element packen und dieses dann anstelle von deinen a in der Klick-Funktion ansprechen:
Code:
$(".select-menu > a span").click(function() {
    $("#mobile-only-menu").slideToggle("slow", "easeInOutExpo");
});
 
Hehe und da sind wir schon beim nähsten Problem...
Das Mobile Menü baut sich irgendwie mit JS auf vom übertragenen normalem Menü und jetzt wird es richtig kompliziert den da hab ich überhaupt keine Ahnung wie das gemacht wird.
Gibt es da nicht eine einfachere Lösung?
Das ist das HTML vom Mobilen Menü:
PHP:
<div class="select-menu">
          <div class="clear20"></div>
            <a href="#" class="button-face cfnt"></a>
        <ul id="mobile-only-menu"></ul>
      </div>
 
So den Span habe ich untergebracht mit.append
Aber was bringt mir jetzt das, bei einem Klick auf das Untermenü wird das immer noch geschlossen...
PHP:
$(document).on( "click touchstart", "a", function() { $(this).toggleClass("hover"); })
			
		/*jQuery Mobile menu*/
		if($("#top_menu").length>0) {	
			var $mobile_menu = jQuery( $("#top_menu").html().split('<li class="notrc"> </li>').join('') );
			$mobile_menu.removeAttr("id").removeAttributes(['id', 'class']);	
			$("#mobile-only-menu").append( $mobile_menu ).accordion().hide();
			$(".select-menu a").append("<span></span>")

			$( ".select-menu > a" ).on( "click mobile-only-menu a", function(e) { 
				$("#mobile-only-menu").slideToggle(2000, "easeInOutExpo");
			});
			$("span").click(function() {
    			$("#mobile-only-menu").slideDown(2000, "easeInOutExpo");
			});
		}		
	})
})( jQuery );
 
Und so geht es auch nicht:
Wie sieht den die Lösung aus???
Ich bin ja so was von auf dem Holzweg :mad:
PHP:
$(document).on( "click touchstart", "a", function() { $(this).toggleClass("hover"); })
			
		/*jQuery Mobile menu*/
		if($("#top_menu").length>0) {	
			var $mobile_menu = jQuery( $("#top_menu").html().split('<li class="notrc"> </li>').join('') );
			$mobile_menu.removeAttr("id").removeAttributes(['id', 'class']);	
			$("#mobile-only-menu").append( $mobile_menu ).accordion().hide();
			$(".select-menu a").append("<span></span>")

			$( ".select-menu > a" ).on( "click mobile-only-menu a", function(e) {
			e.preventDefault() 
				$("#mobile-only-menu").slideToggle(2000, "easeInOutExpo");
			});
			$( ".select-menu > a span" ).on( "click mobile-only-menu a", function(e) {
			e.stopPropagation() 
				$("#mobile-only-menu li").slideToggle(2000, "easeInOutExpo");
			});
		}		
	})
})( jQuery );
 
So ich hab das mal so gelöst:
In meinen CMS System habe ich einfach gesagt bitte die Menüpunkte die ein Untermenü haben nicht verlinken.
Jetzt funktioniert das, ist zwar nicht die beste Lösung aber es geht!
 
Oh, sorry, dich hatte ich ganz vergessen. Super, dass du trotzdem weiter probiert hast!

In meinen CMS System habe ich einfach gesagt bitte die Menüpunkte die ein Untermenü haben nicht verlinken.
Klar, das ist eine Lösung, die sogar ziemlich häufig angewendet wird.
 
Na ja irgendwie musste ich mir doch helfen und eine andere Lösung viel mir nicht ein...
Trotzdem würde es mich interessieren ob das überhaupt geht, weil ich habe so viele Dinge versucht und nix hat funktioniert!
 
Natürlich geht das:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Fenstertitel</title>
<script type="text/javascript" src="//kkjs.kkapsner.de/modules/kkjs.load.js"></script>
<style type="text/css">
.more {
	cursor: pointer;
}
</style>
</head>
<body>
<ul id="menu">
	<li><a href="#a">Eintrag a</a></li>
	<li>
		<a href="#b">Eintrag b</a>
		<span class="more">+</span>
		<ul>
			<li><a href="#b1">Eintrag b1</a></li>
			<li><a href="#b2">Eintrag b2</a></li>
			<li><a href="#b3">Eintrag b3</a></li>
		</ul>
	</li>
	<li><a href="#c">Eintrag c</a></li>
</ul>
<script type="text/javascript">
(function(){
	var menu = kkjs.$("menu");
	kkjs.css.set(kkjs.css.$("ul", {node: menu}), "display", "none");
	kkjs.event.add(kkjs.css.$(".more", {node: menu}), "click", function(ev){
		ev.stopPropagation();
		ev.preventDefault();
		var submenu = kkjs.css.$("> ul", {node: this.parentNode})[0];
		if (submenu){
			var isOpen = !submenu.style.display;
			submenu.style.display = isOpen? "none": "";
			this.innerHTML = isOpen? "+": "−";
		}
	});
}());
</script>
</body>
</html>
- mein Framework durch jQuery zu ersetzen sollte kein Problem sein.
 
Zurück
Oben