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?
onklick handlingar
16 svar · 315 visningar · startad av MizzK
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?
=) vill veta hur jag gör för att kunna ha en onklick handling samt att den skall komma till en specifik sida
<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.
detta fungerar nämligen inte..
<a href="produkt.asp" onclick="return showHide('sub1');" class="meny">produkt</a>
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;
};
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 :)
varför fungar det inte då?? den visar bara undermenyn..
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');
}
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?
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).
gjorde precis så, men det fungerade inte.. kan det bero på att i mitt meny script finns denna funktionen...
window.onload=function(){
find();
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.
*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 =("
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?
ä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";
}
}
};
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.