Avatar billede mik789 Nybegynder
31. maj 2002 - 16:09 Der er 7 kommentarer og
2 løsninger

automatisere gentagelser

Jeg har fået et script af pelkjaer der viser/skjuler lag. Se evt. http://www.eksperten.dk/spm/218248

Jeg har ændret lidt i det for at tage højde for at det både kaldes fra index.html siden og fra en iframe på denne side, se de to sidste if sætninger :

function findObj(theObj, theDoc) {
  var p, i, foundObj;
 
  if(!theDoc) theDoc = document;

/*
  if( (p = theObj.indexOf("?")) > 0 && parent.frames.length) {
    theDoc = parent.frames[theObj.substring(p+1)].document;
    theObj = theObj.substring(0,p);
  }
*/

  if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];
  for (i=0; !foundObj && i < theDoc.forms.length; i++)
    foundObj = theDoc.forms[i][theObj];
  for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)
    foundObj = findObj(theObj,theDoc.layers[i].document);
  if(!foundObj && document.getElementById && self!=parent) foundObj = parent.document.getElementById(theObj);
  if(!foundObj && document.getElementById && self==parent) foundObj = document.getElementById(theObj);
   
  return foundObj;
}

Funktionen kaldes f.eks. sådan:

<p><a href="java script:;" onclick="showHideLayers('lag01','','show','lag00','','hide','lag02','','hide','lag03','','hide');">Vis lag 01</a></p>
<p><a href="java script:;" onclick="showHideLayers('lag02','','show','lag00','','hide','lag01','','hide','lag03','','hide');">Vis lag 02</a></p>
<p><a href="java script:;" onclick="showHideLayers('lag03','','show','lag00','','hide','lag01','','hide','lag02','','hide');">Vis lag 03</a></p>
<p><a href="java script:;" onclick="showHideLayers('lag00','','show','lag01','','hide','lag02','','hide','lag03','','hide');">Vis lag 00</a></p>


Men når nu jeg har, ikke 4, men 50 lag, blive disse kald næsten uoverkommelige. Hvordan kan jeg automatisere kaldene så jeg kan nøjes med ID for den div der skal vises som eneste argument - eller noget andet enkelt?

Derudover vil jeg være glad for nogle tip om hvad i dette script jeg kan undvære. Jeg behøver ikke at tage højde for NS4, men blot IE5-6 og NS6. Jeg har allerede sat noget i kommentar, som I kan se, men er faktisk ikke helt klar over hvad det gør ;-/

30 points for hver del af sp., 60 for begge, er det OK?
Avatar billede mik789 Nybegynder
31. maj 2002 - 16:11 #1
hovsa, glemte lige den anden funktion i scriptet:

function showHideLayers() {
  var i, visStr, obj, args = showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) {
    if ((obj = findObj(args[i])) != null) {
      visStr = args[i+2];
      if (obj.style) {
        obj = obj.style;
        if(visStr == 'show') visStr = 'visible';
        else if(visStr == 'hide') visStr = 'hidden';
      }
      obj.visibility = visStr;
    }
  }
}
Avatar billede Slettet bruger
31. maj 2002 - 16:20 #2
Hvis det kun skal virke i IE5+ og NS6, så må denne funktion vist være rigeligt:

<script>
function showHideLayers(lid) {
if (!document.getElementById) return;
el = document.getElementById(lid);
el.style.visibility = (el.style.visibility == "visible") "hidden" : "visible";
}
</script>

Kaldes med:

<a href="#" onClick="showHideLayers('lag1'); return false;">Vis Lag 1</a>
Avatar billede Slettet bruger
31. maj 2002 - 16:21 #3
Hov, der mangler et spørgsmålstegn i denne linje:

el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
Avatar billede Slettet bruger
31. maj 2002 - 16:22 #4
Nårh, jeg misforstod vist funktionen. Hvad er det præcist, du vil med den?
Avatar billede ras2000 Nybegynder
31. maj 2002 - 16:34 #5
<script>
glel = "";
function showHideLayers(lid) {
if (glel != "") el.visibility = "hidden";
if (!document.getElementById) return;
el = document.getElementById(lid);
el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
glel = el;
}
</script>
Så bliver det forrige element skjult.
Avatar billede Slettet bruger
31. maj 2002 - 18:16 #6
Der mangler bare lige et "style":

if (glel != "") el.style.visibility = "hidden";
Avatar billede mik789 Nybegynder
01. juni 2002 - 23:52 #7
takker allesammen, jeg kan se at det virker, men har dog lige det problem at jeres script ikke tager højde for om funktionen kaldes fra min iframe eller fra indexsiden. Jeg har forsøgt at tage højde for dette således:

glel = "";
function showHideLayers(layerID) {
  if (glel != "") el.style.visibility = "hidden";
  if (!document.getElementById) return;
  if (self!=parent) {
    el = parent.document.getElementById(layerID)
  } else {
    el = document.getElementById(layerID)
  }
  el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
  glel = el;
}

men så vidt jeg kan se tager variablen glel ikke denne betingelse til sig, i alle fald kan jeg ikke kalde funktionen på begge måder.
Avatar billede mik789 Nybegynder
03. juni 2002 - 11:48 #8
Nu da Ekspertens mail er oppe igen kan det være jeg kan komme videre med nogel løsninger. I kan godt ignorere den forrige kommentar. Jeg kan ikke helt overkskue hvad der er galt, men tror nok det er noget i retning af flg.:

Der er tale om flere serier af lag på samme side (dvs. f.eks. 9 lag oveni hinanden på én position og 4 andre lag oveni hinanden på en anden position på siden), og nogle gange er det altså mere end én serie der skal opdateres ved et enkelt klik. Men jeres script fungerer (så vidt jeg kan se) på den måde at det simpelthen gør de lag der før var visible til hidden og omvendt. Så længe der kun er tale om en enkelt serie af lag oveni hinanden virker det, men når der er flere serier placeret forskellige steder på siden, går det ikke.

Den situation der gerne skulle tages højde for er altså:

1. Flere serier af lag, hver serie med sin egen position på siden (hver serie har ét lag der er visible, når siden loades og de andre lag i serien er hidden; lagene i hver serie har stigende z-index numre).

2. Både kald fra sidens iframe og fra siden selv.

Kan det løses, eller skal jeg vende tilbage til det mere besværlige script fra http://www.eksperten.dk/spm/218248 hvor alle lag skal skrives ind som argumenter til funktionskaldet?
Avatar billede mik789 Nybegynder
03. juni 2002 - 18:00 #9
jeg synes ikke rigtig jeg kommer videre her, men tak for forsøget. Jeg giver 20 point for det og tager selv de 40 point med mig til en anden formulering af sp.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Specialister til Netværksoperations til Forsvarets nye Digitale Backbone

Capgemini Danmark A/S

AI/Data Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Junior Projektkonsulent til program Digital og Operativ Transformation

Politiets Efterretningstjeneste

Teamleder til Center for CNE-operationer