Oprettet tor. d. 17. december 2009 kl. 12:23:06

dotcom1
dotcom1 (16.599 point. Point ude: 0)

To gange (window, 'load', myFunction) - den anden overskriver den første

Hej.

Jeg har brug for at kunne køre to forskellige scripts når en side loades. Jeg kan imidlertid se, at den anden funktion overskriver den første. De to script ser således ud:

<script type="text/JavaScript">
  addEvent(window, 'load', initCorners);

  function initCorners() {
    var settings = {
      tl: { radius: 10 },
      tr: { radius: 10 },
      bl: { radius: 10 },
      br: { radius: 10 },
      antiAlias: true
    }
 
    curvyCorners(settings, "#content");
    curvyCorners(settings, "#right");
    curvyCorners(settings, "#bottom");
  }
</script>

og

<script type="text/JavaScript">
    Event.observe( window, 'load', function() {
    var e = new Equalizer( 'content', 'right');
    },
    true );
</script>

Hvordan gør man så begge scripts køres uden problemer?

På forhånd mange tak.

Skrevet tor. d. 17. december 2009 kl. 12:48:22| #1

intenz
intenz (31.848 point)
Der er forskellige muligheder for hvordan du kan gøre det. Du kan se dem her:
http://www.webreference.com/programming/javascript/onloads/

Skrevet tor. d. 17. december 2009 kl. 13:27:38| #2

dotcom1
dotcom1 (16.599 point)
Ja, jeg har selv fundet samme script her: http://simonwillison.net/2004/May/26/addLoadEvent/ - men jeg har ingen anelse om hvordan jeg putter mine to scripts ind i det. Kan du hjælpe med det?

Skrevet tor. d. 17. december 2009 kl. 13:32:06| #3

intenz
intenz (31.848 point)
Mit umiddelbare bud er:

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(initCorners);
addLoadEvent(function() {
  var e = new Equalizer( 'content', 'right');
});

Skrevet tor. d. 17. december 2009 kl. 13:51:23| #4

dotcom1
dotcom1 (16.599 point)
Hmm, det må vel så blive noget i den stil:

<script type="text/JavaScript">
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(initCorners) {
    var settings = {
      tl: { radius: 10 },
      tr: { radius: 10 },
      bl: { radius: 10 },
      br: { radius: 10 },
      antiAlias: true
    }
 
    curvyCorners(settings, "#content");
    curvyCorners(settings, "#right");
    curvyCorners(settings, "#bottom");
  };
addLoadEvent(function() {
    var e = new Equalizer( 'content', 'right');
});
</script>

- Men det giver fejl i linien
addLoadEvent(initCorners) {

"missing ; before statement"

Nogen idéer?

Skrevet tor. d. 17. december 2009 kl. 14:02:53| #5

intenz
intenz (31.848 point)
initCorners er allerede en funktion og skal derfor ikke sættes som funktion i onload metoden.

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(initCorners); // initCorners funktionen bliver tilføjet til onload her.

addLoadEvent(function() {
  var e = new Equalizer( 'content', 'right');
});

function initCorners() {
    var settings = {
      tl: { radius: 10 },
      tr: { radius: 10 },
      bl: { radius: 10 },
      br: { radius: 10 },
      antiAlias: true
    }
 
    curvyCorners(settings, "#content");
    curvyCorners(settings, "#right");
    curvyCorners(settings, "#bottom");
  }

Skrevet tor. d. 17. december 2009 kl. 14:35:25| #6

dotcom1
dotcom1 (16.599 point)
Hej igen og tak for din hjælp.

Funktionen initCorners bliver kørt fint. Derimod ser det ikke ud til at

Event.observe( window, 'load', function() {
    var e = new Equalizer( 'content', 'right');
    },
    true );

- bliver kørt.

Se min testside her: http://komfrisk.dk/test/post.html

initCorners laver runde hjørner mens den der Equalizer gør, at begge divs bliver lige høje uanset hvor meget indhold, der er i dem.

Begge scripts virker fint hver for sig, så der er en eller anden konflikt et sted.

Skrevet tor. d. 17. december 2009 kl. 14:49:44| #7

intenz
intenz (31.848 point)
Prøv at se om funktionen bliver kørt, ved at ændre det til:
addLoadEvent(function() {
  alert('virker');
  var e = new Equalizer( 'content', 'right');
});

Ellers kan du lave den nemme løsning, ved at lave en enkelte funktion der køres ved onload, som så indeholder alt det der skal køres:

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(onload_func); // funktion der indeholder alt der skal køres

function onload_func() {
  initCorners();
  var e = new Equalizer( 'content', 'right');
}

function initCorners() {
    var settings = {
      tl: { radius: 10 },
      tr: { radius: 10 },
      bl: { radius: 10 },
      br: { radius: 10 },
      antiAlias: true
    }
 
    curvyCorners(settings, "#content");
    curvyCorners(settings, "#right");
    curvyCorners(settings, "#bottom");
  }

Skrevet tor. d. 17. december 2009 kl. 14:51:58| #8

dotcom1
dotcom1 (16.599 point)
Ah, fandt løsningen.

Jeg fjernede addEvent(window, 'load', initCorners);

og tilføjede i stedet:

<script type="text/JavaScript">
    Event.observe( window, 'load', function() {
    var e = new Equalizer( 'content', 'right');
    initCorners();
    },
    true );
</script>

Det virker!

Du skal alligevel have tak for din hjælp.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

omskriv regex så felt kan være tomt

Oprettet den 31. juli 2010 kl. 09.32
hypofysen giver 30 point for svar | Giv et svar »

Dropdown udfylder værdier i flere input felter

Oprettet den 30. juli 2010 kl. 21.47
apromis giver 200 point for svar | Giv et svar »

'style' is null or not an object

Oprettet den 29. juli 2010 kl. 22.00
walkie84 giver 30 point for svar | Giv et svar »

Seneste guides

100% højde med CSS i alle browsere
XML
Autocad / 3D Max / Revit til Salg.





Tips & Tricks fra PC World

Teaser billede

Sådan får du mest ud af batteriet på din bærbare

Batterierne i den bærbare lever sjældent op til forventningerne, men det er ikke altid batteriernes skyld. Se her hvordan du får mest muligt ud af dine batterier.


Anmeldelser fra PC World

Teaser billede

GTX460: Grafikkort med fin ydelse til rimelige penge

De store grafikkort løber med opmærksomheden, men det er i mellemklassen at de gode køb findes. Et af dem er det helt nye Nvidia GTX460. Se kortets resultater her.


Seneste blogindlæg

Teaser billede

Nu kan du slettes

Det sker af og til at en bruger ønsker at slette sin profil her på Eksperten. Det har vi haft svært ved, men nu kan du gøre det nemt og enkelt. Alt du skal gøre er at logge ind, gå ind på...


Nyheder fra PC World

Teaser billede

Test: Stream nye spil til gamle computere

Det er slut med at investere tusindvis af kroner i dyr hardware for at kunne spille de nyeste spil - amerikansk firma lader stor serverfarm klare arbejdet og streamer spillene til dig via nettet....


Nyheder fra Computerworld

Teaser billede

Test din viden med Computerworlds store sommerquiz

4. del: Brug agurketiden til at få opdateret din viden om it-branchen, og test for sjov om kollegerne på ferie eller derhjemme er lige så skarpe. Computerworld quizzer hver uge hele sommeren.



Kurser
Samarbejdspartnere

Udgiver · © 2010 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301