webForumDet fria alternativet
Logga in / Bli medlem

onklick handlingar

JavaScript

16 svar · 315 visningar · startad av MizzK

Medlem sedan juni 2003410 inlägg
Trådstart#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?

Medlem sedan nov. 20017 144 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?

Medlem sedan juni 2003410 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

Medlem sedan juni 20004 308 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.

Medlem sedan juni 2003410 inlägg
#5

detta fungerar nämligen inte..

<a href="produkt.asp" onclick="return showHide('sub1');" class="meny">produkt</a>
Medlem sedan juni 2003410 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;
};
Medlem sedan juni 20004 308 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 :)

Medlem sedan juni 2003410 inlägg
#8

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

Medlem sedan juni 20004 308 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');
}
Medlem sedan juni 2003410 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?

Medlem sedan juni 20004 308 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).

Medlem sedan juni 2003410 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();
Medlem sedan juni 20004 308 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.

Medlem sedan juni 2003410 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 =("

Medlem sedan juni 20004 308 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?

Medlem sedan juni 2003410 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";
}
}
};
Medlem sedan juni 20004 308 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.
260 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)