listexpander menu geeft confict met select menu

Status
Niet open voor verdere reacties.

Gust1977

Gebruiker
Lid geworden
8 nov 2007
Berichten
70
Zie deze pagina. Dit is een beperkte pagina van een veel groter systeem, maar gewoon even aangemaakt om het probleem te illustreren.

Het werkt met een li-ul systeem. Maar als je het select-menu (dropdownmenu) gebruikt klapt alles weer in elkaar, en dat zou niet mogen.

Volgens mij ligt dit aan het javascript die erachter zit. Ik ben helemaal geen kenner in javascript, maar misschien dat er hier iemand is die weet wat er veranderd moet worden?

Dit is de javascript-code:
HTML:
/* 

	List Expander 
	written by Alen Grakalic, provided by Css Globe (cssglobe.com)
	
*/

this.listexpander = function(){
	
	// edit 
	
	var expandTo = 1; // level up to which you want your lists to be initially expanded. 1 is minimum
	var expandText = "uitklappen"; // text for expand all button
	var collapseText = "inklappen"; // text for collapse all button		
	var listClass = "listexpander" // class name that you want to assign to list(s). If you wish to change it make sure to update the css file as well  
	
	// end edit (do not edit below this line)
	
	this.start = function(){
		var ul = document.getElementsByTagName("ul");
		for (var i=0;i<ul.length;i++){
			if(ul[i].className == listClass){
				create(ul[i]);
				buttons(ul[i])
			};
		};
	};

	this.create = function(list) {	
		var items = list.getElementsByTagName("li");
		for(var i=0;i<items.length;i++){
			listItem(items[i]);
		};
	};	

	this.listItem = function(li){
		if(li.getElementsByTagName("ul").length > 0){
			var ul = li.getElementsByTagName("ul")[0];
			ul.style.display = (depth(ul) <= expandTo) ? "block" : "none";
			li.className = (depth(ul) <= expandTo) ? "expanded" : "collapsed";
			li.over = true;	
			ul.onmouseover = function(){li.over = false;} 
			ul.onmouseout = function(){li.over = true;} 
			li.onclick = function(){
				if(this.over){
					ul.style.display = (ul.style.display == "none") ? "block" : "none";
					this.className = (ul.style.display == "none") ? "collapsed" : "expanded";				
				};
			};
		};		
	};	
	
	this.buttons = function(list){
		var parent = list.parentNode;
		var p = document.createElement("p");
		p.className = listClass;
		var a = document.createElement("a");
		a.innerHTML = expandText;
		a.onclick = function(){expand(list)};
		p.appendChild(a);
		var a = document.createElement("a");
		a.innerHTML = collapseText;
		a.onclick = function(){collapse(list)};
		p.appendChild(a);
		parent.insertBefore(p,list);
	};
	
	this.expand = function(list){
		li = list.getElementsByTagName("li");
		for(var i=0;i<li.length;i++){
			if(li[i].getElementsByTagName("ul").length > 0){
				var ul = li[i].getElementsByTagName("ul")[0];
				ul.style.display = "block";
				li[i].className = "expanded";
			};
		};
	};
	
	this.collapse = function(list){
		li = list.getElementsByTagName("li");
		for(var i=0;i<li.length;i++){
			if(li[i].getElementsByTagName("ul").length > 0){
				var ul = li[i].getElementsByTagName("ul")[0];
				ul.style.display = "none";
				li[i].className = "collapsed";
			};
		};
	};
	
	this.depth = function(obj){
		var level = 1;
		while(obj.parentNode.className != listClass){
			if (obj.tagName == "UL") level++;
			obj = obj.parentNode;
		};
		return level;
	};	
	
	start();
	
};

window.onload = listexpander;
 
De oplossing zie ik zo niet, maar even ter aanvulling, in FF doet dit probleem zich niet voor.
 
Weet ik, het probleem doet zich alleen voor in IE en Opera. Bij FF, Netscape en Mercator werkt het. Maar wij werken met IE, al onze computers zijn IE. Dus zou het handig zijn moest het in IE ook werken.
 
Zou het dan toch aan de css liggen? Zeer onwaarschijnlijk, maar je kunt nooit weten:

Css
HTML:
/*
	List Expander 
*/

.listexpander{width:100%;}
.listexpander, .listexpander ul, .listexpander li{
	margin:0;
	padding:0;
	list-style:none;
}
.listexpander ul{
	/*
	Uncomment this if you want to initially hide the child lists. 
	If you do, Javascript disabled and CSS enabled browsers will not be able to use this list.
	display:none;
	*/ 
}
.listexpander li{
	line-height:200%;
	margin-top:1px;
	cursor:default;
	text-indent:30px;
	font-weight:bold;
	width:100%;
}

.listexpander li2{
	line-height:200%;
	margin-top:1px;
	cursor:default;
	text-indent:15px;
	font-weight:bold;
	width:100%;
}

.listexpander li.collapsed, .listexpander li.expanded{cursor:pointer;} 

/* first level */

.listexpander li, .listexpander li.collapsed{background:#eee url(collapsed.gif) no-repeat 5px .4em;} 
.listexpander li.expanded{background:#eee url(expanded.gif) no-repeat 5px .4em;}

/* second level */

.listexpander li ul, .listexpander li li{background:#f8f8f8;font-weight:normal;}
.listexpander li li.collapsed{background:#f8f8f8 url(collapsed.gif) no-repeat 5px .4em;} 
.listexpander li li.expanded{background:#f8f8f8 url(expanded.gif) no-repeat 5px .4em;}

/* third level */

.listexpander li li ul, .listexpander li li li{background:#fff;}
.listexpander li li li.collapsed{background:#fff url(collapsed.gif) no-repeat 5px .4em;} 
.listexpander li li li.expanded{background:#fff url(expanded.gif) no-repeat 5px .4em;}

/* fourth level */

.listexpander li li li li{text-indent:0;margin-left:30px;width:auto;}

/* etc. */

/* buttons */

p.listexpander{
	height:1.5em;
	margin:1em 0;
}
p.listexpander2{
	height:1em;
	margin:1em 0;
}
p.listexpander a{
	float:left;
	height:1.5em;
	line-height:1.5em;
	padding:0 10px;
	border:1px solid #eee;
	margin-right:5px;
	cursor:pointer;
}
p.listexpander a:hover{
	background:#f8f8f8;
}

/* float fix */
/*.listexpander li:after{
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}
*/
.listexpander li{
	display: inline-block;
}
/* Hides from IE-mac \*/
* html .listexpander li{
	height: 1%;
}
.listexpander li{
	display: block;
}
/* End hide from IE-mac */
/* end float fix */
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan