Avatar billede dotcom1 Nybegynder
17. december 2009 - 12:23 Der er 6 kommentarer og
2 løsninger

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.
Avatar billede intenz Novice
17. december 2009 - 12:48 #1
Der er forskellige muligheder for hvordan du kan gøre det. Du kan se dem her:
http://www.webreference.com/programming/javascript/onloads/
Avatar billede dotcom1 Nybegynder
17. december 2009 - 13:27 #2
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?
Avatar billede intenz Novice
17. december 2009 - 13:32 #3
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');
});
Avatar billede dotcom1 Nybegynder
17. december 2009 - 13:51 #4
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?
Avatar billede intenz Novice
17. december 2009 - 14:02 #5
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");
  }
Avatar billede dotcom1 Nybegynder
17. december 2009 - 14:35 #6
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.
Avatar billede intenz Novice
17. december 2009 - 14:49 #7
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");
  }
Avatar billede dotcom1 Nybegynder
17. december 2009 - 14:51 #8
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.
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