Avatar billede doeleman Nybegynder
29. august 2000 - 17:36 Der er 7 kommentarer og
1 løsning

DHTML - Initialisere layers

Jeg bruger følgende funktion til at initialisere mine layers:
function init() {
  for (var i=0;i<=4;i++) {
    myLayers[i] = new DynLayer(\'myLayer\'+i);
  }
}

Da lagene bliver dannet ud fra en database ved jeg imidlertidig ikke på forhånd hvormange der bliver og kan derfor ikke fastsætte i. Det kan jeg selvfølgelig beregne serverside, men ville gerne adskille serverside og clientside scripts, så er der ikke en anden mulighed?

Jeg har prøvet følgende, der dog ikke virker.

function init() {
  while (\'myLayer\'+i) {
    myLayers[i] = new DynLayer(\'myLayer\'+i);
    i++;
  }
}
Avatar billede olebole Juniormester
29. august 2000 - 20:54 #1
<ole>
Her er noget, jeg lige har sakset fra et af mine egne scripts...så kan du selv lave det om til dit (...og Steinman\'s) brug ;o)  Det viser ideen:

myLength = (ns4)? document.layers.length : document.all.tags(\"div\").length
for (i=0; i<myLength; i++) {
    obj = (ns4)? document.layers[i].id : document.all.tags(\"div\")[i].id
    if (obj.indexOf(\'tex\') != -1) {
        **  det, der skal gælde for de lag, der hedder noget med tex  **
    }
}

/Vh
</bole>
Avatar billede doeleman Nybegynder
29. august 2000 - 21:49 #2
Lige hvad jeg manglede.
Tusind tak olebole.
Avatar billede doeleman Nybegynder
29. august 2000 - 22:50 #3
Arghh, scriptet virker nu fint i ie4 og nn4, men crasher totalt i nn6.

Kan du give et hint om, hvad der er galt?

function BrowserCheck() {
  var b = navigator.appName
  if (b==\"Netscape\") this.b = \"ns\"
  else if (b==\"Microsoft Internet Explorer\") this.b = \"ie\"
  else this.b = b
  this.version = navigator.appVersion
  this.v = parseInt(this.version)
  this.ns = (this.b==\"ns\" && this.v>=4)
  this.ns4 = (this.b==\"ns\" && this.v==4)
  this.ns5 = (this.b==\"ns\" && this.v==5)
  this.ie = (this.b==\"ie\" && this.v>=4)
  this.ie4 = (this.version.indexOf(\'MSIE 4\')>0)
  this.ie5 = (this.version.indexOf(\'MSIE 5\')>0)
  this.min = (this.ns||this.ie)
}
is = new BrowserCheck()

var myLayers = new Array();

function init() {
  myLength = (is.ns) ? document.layers.length : document.all.tags(\"div\").length;
  for (var i=0; i<myLength; i++) {
    obj = (is.ns) ? document.layers[i].id : document.all.tags(\"div\")[i].id
    if (obj.indexOf(\'myLayer\') != -1) {
      myLayers[i] = new DynLayer(\'myLayer\'+i);
    }
  }
}
Avatar billede olebole Juniormester
30. august 2000 - 09:56 #4
Æv...jeg har ikke NS6 inde i øjeblikket  :o(

Prøv at skrive:
    java script:
(husk at slutte med et kolon!) i din adressebar og tryk \'ENTER\', så får du en fejlmeddelelse op. Kan du ikke selv tyde den, hjælper jeg gerne  ;o)

Hvad sker, hvis du initialiserer \'manuelt\'...du kan bare prøve et lag eller to? Det kunne jo være i resten af scriptet(?)
/Vh
Avatar billede doeleman Nybegynder
30. august 2000 - 11:05 #5
Scriptet virker (stort set) fint, hvis jeg initialiserer manualt.

Jeg kendte ikke muligheden for at få fejlmeddelelser frem i NS6, så det vil jeg prøve, når jeg kommer hjem (har ikke NS6 på denne maskine).
Avatar billede doeleman Nybegynder
30. august 2000 - 11:11 #6
Jeg prøvede noget lignende, men jeg ved som sagt ikke endnu, hvad der er galt.

var myLayers = new Array();

function init() {
  myLength = (is.ns) ? document.layers.length : document.all.tags(\"div\").length;
  for (var i=0; i<myLength; i++) {
    if(is.ns) {
      obj = (is.ns4) ? eval(\"document.layers[i].id\") : eval(\"document.getElementById(i).id\");
    } else {
      obj = document.all.tags(\"div\")[i].id;
    }
    if (obj.indexOf(\'myLayer\') != -1) {
      myLayers[i] = new DynLayer(\'myLayer\'+i);
    }
  }
}
Avatar billede doeleman Nybegynder
30. august 2000 - 20:34 #7
Jeg fandt en fejl i den 3. linie, så nu ser scriptet således ud:

var myLayers = new Array();

function init() {
  if (is.ns) {
    myLength = (is.ns4) ? document.layers.length : document.getElementsByTagName(\"div\").length;
  } else {
    myLength = document.all.tags(\"div\").length;
  }
  for (var i=0; i<myLength; i++) {
    if(is.ns) {
      obj = (is.ns4) ? document.layers[i].id : document.getElementById(i).id;
    } else {
      obj = document.all.tags(\"div\")[i].id;
    }
    if (obj.indexOf(\'myLayer\') != -1) {
      myLayers[i] = new DynLayer(\'myLayer\'+i);
    }
  }
}

Jeg får dog stadigvæk følgende fejl i NN6:
document.getElementById(i) has no properties

Kan du hjælpe? Jeg er selvfølgelig villig til at give flere points, hvis du kan få det til at virke.
Avatar billede olebole Juniormester
31. august 2000 - 03:52 #8
var myLayers = new Array();

function init() {
  if (is.ns) {
    myLength = (is.ns4) ? document.layers.length : document.getElementsByTagName(\"div\").length;
  } else {
    myLength = document.all.tags(\"div\").length;
  }
  for (var i=0; i<myLength; i++) {
    if(is.ns) {
      obj = (is.ns4) ? document.layers[i].id : document.getElementsByTagName(\"div\")[i].id;
    } else {
      obj = document.all.tags(\"div\")[i].id;
    }
    if (obj.indexOf(\'myLayer\') != -1) {
      myLayers[i] = new DynLayer(\'myLayer\'+i);
    }
  }
}

Så skulle det virke  ;o)
/Vh
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