webForumDet fria alternativet

onklick handlingar

16 svar · 315 visningar · startad av MizzK

MizzKMedlem sedan juni 2003585 inlägg
#1

jag har en funktion som skall på onklick visa sub menyn men samtidigt vill jag ha så att den går till en sida som den expanderar menyn.. hur löser jag detta?

Jesper TMedlem sedan nov. 20017 058 inlägg
#2

Re: onklick handlingar

MizzK skrev:

jag har en funktion som skall på onklick visa sub menyn men samtidigt vill jag ha så att den går till en sida som den expanderar menyn.. hur löser jag detta?

Märklig meningsbyggnad. Vad precis menar du?

MizzKMedlem sedan juni 2003585 inlägg
#3

=) vill veta hur jag gör för att kunna ha en onklick handling samt att den skall komma till en specifik sida

JojoxxMedlem sedan juni 20004 306 inlägg
#4
<a href="sida.asp" onclick="doSomething();" ...osv

Men jag antar att du har ett target på länken, annars kommer sidan som du laddar att ersätta den aktuella och ev. förändring som du gör via onclick kommer inte att märkas.

MizzKMedlem sedan juni 2003585 inlägg
#5

detta fungerar nämligen inte..

<a href="produkt.asp" onclick="return showHide('sub1');" class="meny">produkt</a>
MizzKMedlem sedan juni 2003585 inlägg
#6

Lägger även ut funktionen showhide=)

function showHide(s){
	var e=getElm(s);

	if(!e){
		return true;
	}

	if(active&&active!=e.id){
		var oE=getElm(active);
		if(document.all){
			oE.nextSibling.style.display=(window.opera)?"table-row":"block";
		} else {
			oE.nextSibling.nextSibling.style.display="table-row";
		}
		oE.style.display="none";
	}
	else if(!active&&find()){
		var i=subMenus.length;
		while(i-->0){
			if(e==getElm(subMenus[i][0])){
				if(document.all){
					_oE.nextSibling.style.display=(window.opera)?"table-row":"block";
				} else {
					_oE.nextSibling.nextSibling.style.display="table-row";
				}
				continue;
			} else {
				getElm(subMenus[i][0]).style.display="none";
			}
		}
	}

	if(e.style.display==""||e.style.display=="none"){
		if(document.all){
			e.style.display=(window.opera)?"table-row":"block";
			e.nextSibling.style.display="none";
		} else {
			e.style.display="table-row";
			e.nextSibling.nextSibling.style.display="none";
		}
	} else {
		if(document.all){
			e.nextSibling.style.display=(window.opera)?"table-row":"block";
		} else {
			e.nextSibling.nextSibling.style.display="table-row";
		}
		e.style.display="none";
	}

	active=e.id;

	return false;
};
JojoxxMedlem sedan juni 20004 306 inlägg
#7

Oavsett vad funktionen showHide gör så kommer ju sidan (produkt.asp) att laddas och ersätta aktuell sida. Det är som att ringa in ett telefonnummer i katalogen och sedan bläddra fram en sida och fundera varför inget nummer är inringat :)

MizzKMedlem sedan juni 2003585 inlägg
#8

varför fungar det inte då?? den visar bara undermenyn..

JojoxxMedlem sedan juni 20004 306 inlägg
#9

Om "produkt.asp" skall visa en speciell undermeny (sub1) så hårdstyr det på sidan. Eller om du inte vet hur du skall göra det kan du göra samma sak som du gör onclick (när länken klickas) onload (när sidan laddats) istället.

window.onload=function(){
   showHide('sub1');
}
MizzKMedlem sedan juni 2003585 inlägg
#10

känner mig lite tom skallen nu, men var skall jag lägga den koden? i produkt.asp? visst tar jag bort onklick då på den länken?

JojoxxMedlem sedan juni 20004 306 inlägg
#11

Du lägger det inom ett par script-taggar, var på sidan spelar inte så stor roll eftersom koden ändå inte körs förrens sidan laddats. Om du tar bort onclick på länken spelar inte så stor roll med tanke på det jag förklarade innan, men det ser kanske snyggare ut om du plockar bort den (så riskerar du inte att något fladdrar till innan sidan byts).

...
<body>
<script type="text/javascript">
window.onload=function(){
   showHide('sub1');
}
</script>
...

(observera att du bara kan ha 1 onload-funktion på sidan).

MizzKMedlem sedan juni 2003585 inlägg
#12

gjorde precis så, men det fungerade inte.. kan det bero på att i mitt meny script finns denna funktionen...

window.onload=function(){
	find();
JojoxxMedlem sedan juni 20004 306 inlägg
#13

Japp, det får som sagt bara finnas 1 onload-funktion på sidan, men du kan lägga ihop de båda till en;

window.onload=function(){
   showHide('sub1');
   find();
}

Jag skulle tippa på att find(); är till för att synca menyn med resterande underlänkar, så det kan hända att man får bygga om funktionen find() istället.

MizzKMedlem sedan juni 2003585 inlägg
#14

*suckar* gör jag så e den alltid expanderad =( beror väl på att jag har filen som include antar jag.....
"att man skall vara så dålig på javascript =("

JojoxxMedlem sedan juni 20004 306 inlägg
#15

Ett tips är att börja med något som är lite enklare och inte hoppa på de största grejerna på en gång. :) Även om vi löser detta kanske du inte har så stor behållning av det tills nästa gång.

Hur ser funktionen find() ut?

MizzKMedlem sedan juni 2003585 inlägg
#16

är ett färdigt script som jag har fått.. tänkte att de kan inte vara så svårt att använda.. allt fungerar perfekt förutom just detta..

var active=null,_oE=null;
var subMenus=[
	["sub1","cat","prod"],
	["sub2","cat","serv"]
	
];

function getElm(e){
	switch(true){
	case typeof(document.all)=="object":
		return document.all[e];
	case typeof(document.getElementById)=="function":
		return document.getElementById(e);
	default:
		return null;
	}
};

function showHide(s){
	var e=getElm(s);

	if(!e){
		return true;
	}

	if(active&&active!=e.id){
		var oE=getElm(active);
		if(document.all){
			oE.nextSibling.style.display=(window.opera)?"table-row":"block";
		} else {
			oE.nextSibling.nextSibling.style.display="table-row";
		}
		oE.style.display="none";
	}
	else if(!active&&find()){
		var i=subMenus.length;
		while(i-->0){
			if(e==getElm(subMenus[i][0])){
				if(document.all){
					_oE.nextSibling.style.display=(window.opera)?"table-row":"block";
				} else {
					_oE.nextSibling.nextSibling.style.display="table-row";
				}
				continue;
			} else {
				getElm(subMenus[i][0]).style.display="none";
			}
		}
	}

	if(e.style.display==""||e.style.display=="none"){
		if(document.all){
			e.style.display=(window.opera)?"table-row":"block";
			e.nextSibling.style.display="none";
		} else {
			e.style.display="table-row";
			e.nextSibling.nextSibling.style.display="none";
		}
	} else {
		if(document.all){
			e.nextSibling.style.display=(window.opera)?"table-row":"block";
		} else {
			e.nextSibling.nextSibling.style.display="table-row";
		}
		e.style.display="none";
	}

	active=e.id;

	return false;
};

function find(){
	if(subMenus.length<1 || location.search.indexOf("cat=")<1 || location.search.indexOf("cat=pics")>0){
		return 0;
	}

	var
		o=subMenus,
		i=o.length,
		l=location.search;
	while(i-->0){
		if(l.indexOf(o[i][1])>0){
			if(l.split(o[i][1])[1].indexOf(o[i][2])>0){
				_oE=getElm(o[i][0]);

				if(document.all){
					_oE.style.display=(window.opera)?"table-row":"block";
					_oE.nextSibling.style.display="none";
				} else {
					_oE.style.display="table-row";
					_oE.nextSibling.nextSibling.style.display="none";
				}
				continue;
			}
		}
		getElm(o[i][0]).style.display="none";
	}
	return 1;
};

window.onload=function(){
	find();

var a=document.getElementsByTagName("a");
for (var i=0;i<a.length;i++){
if(a[i].href.substring(a[i].href.lastIndexOf("/")+1)==location.href.substring(location.href.lastIndexOf("/")+1)){
a[i].style.textDecoration="underline";
}
}
};
JojoxxMedlem sedan juni 20004 306 inlägg
#17

Denna fil inkluderas antagligen på fler sidor än produkt.asp antar jag? I så fall får du göra en kopia på den och ändra följande i kopian. Inkludera sidan den istället till produkt.asp

function find(){
	if(subMenus.length<1 || location.search.indexOf("cat=")<1 || location.search.indexOf("cat=pics")>0){
		showHide('sub1');
		return 0;
	}
// Och så vidare... resten av scriptet.
Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb