Aller au contenu

Faire cohabiter 2 "window.onload"


Sujets conseillés

Posté (modifié)

Bonjour tous,

J'ai une page html qui contient 2 javascript différents ...

les 2 utilises la commande "window.onload" et ça empêche un des 2 scripts de fonctionner :nonono:

Comment s'y prendre pour les faire cohabiter ?

Merci et bonne fin de journée

yhugo

PS_Je suis débutant en JavaScript :thumbsdown:

Modifié par yhugo
Posté

salut,

il doit y avoir 2 (ou plus) variables communes (enfin dont les noms sont communs) aux 2 scripts : il te suffra de modifier ce nom de variable dans l'un des 2 scripts et tout ira bien ;)

Posté
salut,

il doit y avoir 2 (ou plus) variables communes (enfin dont les noms sont communs) aux 2 scripts : il te suffra de modifier ce nom de variable dans l'un des 2 scripts et tout ira bien ;)

Salut Georges,

j'ai regardé et aucune variable semble en doublon ...



<script type="text/javascript">
//<![CDATA[
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
for (var i = 1; i<=10; i++) {
if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
}
if (d) {d.style.display='block';}
}
//-->
//]]>
</script>


<script type="text/javascript">
//<![CDATA[
<!--
/***********************************************
* Conveyor belt slideshow script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at [url="http://www.dynamicdrive.com/"]http://www.dynamicdrive.com/[/url] for full source code
***********************************************/


//Specify the slider's width (in pixels)
var sliderwidth="490px"
//Specify the slider's height
var sliderheight="175px"
//Specify the slider's slide speed (larger is faster 1-10)
var slidespeed=1
//configure background color:
slidebgcolor="#FFFFFF"

//Specify the slider's images
var leftrightslide=new Array()
var finalslide=''
leftrightslide[0]='<img src="images/projets/smenu1_foto1.jpg" alt="image" />'
leftrightslide[1]='<img src="images/projets/smenu1_foto2.jpg" alt="image" />'
leftrightslide[2]='<img src="images/projets/smenu2_foto1.jpg" alt="image" />'
leftrightslide[3]='<img src="images/projets/smenu2_foto2.jpg" alt="image" />'
leftrightslide[4]='<img src="images/projets/smenu3_foto1.jpg" alt="image" />'
leftrightslide[5]='<img src="images/projets/smenu3_foto2.jpg" alt="image" />'
leftrightslide[6]='<img src="images/projets/smenu4_foto1.jpg" alt="image" />'
leftrightslide[7]='<img src="images/projets/smenu4_foto2.jpg" alt="image" />'
leftrightslide[8]='<img src="images/projets/smenu5_foto1.jpg" alt="image" />'
leftrightslide[9]='<img src="images/projets/smenu5_foto2.jpg" alt="image" />'
leftrightslide[10]='<img src="images/projets/smenu5_foto3.jpg" alt="image" />'
leftrightslide[11]='<img src="images/projets/smenu5_foto4.jpg" alt="image" />'

//Specify gap between each image (use HTML):
var imagegap=" "

//Specify pixels gap between each slideshow rotation (use integer):
var slideshowgap=3


////NO NEED TO EDIT BELOW THIS LINE////////////

var copyspeed=slidespeed
leftrightslide='<span style="white-space: nowrap;">'+leftrightslide.join(imagegap)+'<\/span>'
var iedom=document.all||document.getElementById
if (iedom)
document.write('<span id="temp" style="visibility:hidden;position:absolute;top:-100px;left:-9000px;">'+leftrightslide+'<\/span>')
var actualwidth=''
var cross_slide, ns_slide

function fillup(){
if (iedom){
cross_slide=document.getElementById? document.getElementById("test2") : document.all.test2
cross_slide2=document.getElementById? document.getElementById("test3") : document.all.test3
cross_slide.innerHTML=cross_slide2.innerHTML=leftrightslide
actualwidth=document.all? cross_slide.offsetWidth : document.getElementById("temp").offsetWidth
cross_slide2.style.left=actualwidth+slideshowgap+"px"
}
else if (document.layers){
ns_slide=document.ns_slidemenu.document.ns_slidemenu2
ns_slide2=document.ns_slidemenu.document.ns_slidemenu3
ns_slide.document.write(leftrightslide)
ns_slide.document.close()
actualwidth=ns_slide.document.width
ns_slide2.left=actualwidth+slideshowgap
ns_slide2.document.write(leftrightslide)
ns_slide2.document.close()
}
lefttime=setInterval("slideleft()",30)
}
window.onload=fillup

function slideleft(){
if (iedom){
if (parseInt(cross_slide.style.left)>(actualwidth*(-1)+8))
cross_slide.style.left=parseInt(cross_slide.style.left)-copyspeed+"px"
else
cross_slide.style.left=parseInt(cross_slide2.style.left)+actualwidth+slideshowga
p+"px"

if (parseInt(cross_slide2.style.left)>(actualwidth*(-1)+8))
cross_slide2.style.left=parseInt(cross_slide2.style.left)-copyspeed+"px"
else
cross_slide2.style.left=parseInt(cross_slide.style.left)+actualwidth+slideshowga
p+"px"

}
else if (document.layers){
if (ns_slide.left>(actualwidth*(-1)+8))
ns_slide.left-=copyspeed
else
ns_slide.left=ns_slide2.left+actualwidth+slideshowgap

if (ns_slide2.left>(actualwidth*(-1)+8))
ns_slide2.left-=copyspeed
else
ns_slide2.left=ns_slide.left+actualwidth+slideshowgap
}
}


if (iedom||document.layers){
with (document){
document.write('')
if (iedom){
write('<div style="position:relative;width:'+sliderwidth+';height:'+sliderheight+';overflow:hidden">')
write('<div style="position:absolute;width:'+sliderwidth+';height:'+sliderheight+';background-color:'+slidebgcolor+'" onMouseover="copyspeed=0" onMouseout="copyspeed=slidespeed">')
write('<div id="test2" style="position:absolute;left:0px;top:0px"><\/div>')
write('<div id="test3" style="position:absolute;left:-1000px;top:0px"><\/div>')
write('<\/div><\/div>')
}
else if (document.layers){
write('<ilayer width='+sliderwidth+' height='+sliderheight+' name="ns_slidemenu" bgColor='+slidebgcolor+'>')
write('<layer name="ns_slidemenu2" left=0 top=0 onMouseover="copyspeed=0" onMouseout="copyspeed=slidespeed"><\/layer>')
write('<layer name="ns_slidemenu3" left=0 top=0 onMouseover="copyspeed=0" onMouseout="copyspeed=slidespeed"><\/layer>')
write('<\/ilayer>')
}
document.write('')
}
}
//-->
//]]>
</script>

Désolé pour ces bouts de code un peu long ...

Merci

Posté

et tu es certain que les 2 fonctionnent séparément ? ce qui m'étonne, c'est que la fonction montre() attend un argument que le onload n'apporte pas...

Posté
et tu es certain que les 2 fonctionnent séparément ? ce qui m'étonne, c'est que la fonction montre() attend un argument que le onload n'apporte pas...

Excuse-moi mais je ne comprends pas très bien ce que tu veux dire ... si j'inverse l'ordre des scripts dans la page, c'est le dernier qui apparaît dans le code qui marche ... et vice versa ...

Voici ce que fait ce script, celui qui utilise la fonction montre()

Merci

Posté

le script est appelé dans la page par

<dt onclick="java script:montre();"><a href="#">Menu 1</a></dt>

c'est certainement à ce niveau que tu t'emmêles les pinceaux..

Posté (modifié)

yo !

je pense que c'est peut-être tout simplement car tu ne peux pas avoir 2 appel avec window.onload dans une même fenêtre. Pour faire essayede faire un détour par une fonction comme ceci :

window.onload = function() {
montre();
fillup();
// toutes les actions onload ...
}

Ca marche ?

Modifié par AntiStatic
Posté

Tu peux aussi ajouter un évenement au onload pour chaque fonction que tu souhaites appeler au démarrage :

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

C'est bien utile si tu utilises un script externe qui à déjà modifié le onload, dans ce cas, il fonctionnera encore.

Steph

Posté (modifié)

Bon matin à tous :wacko:

Merci pour votre aide, j'ai opté finalement pour la proposition de AntiSatic et ça marche bien :)

window.onload = function() {
montre();
fillup();
// toutes les actions onload ...
}

Ce cas est donc résolu (Au fait, comment on fait pour indiquer Résolu à nos sujets ?)

Bonne journée et bonne fin de semaine !

yhugo

Modifié par yhugo
Posté

On ne met pas de [résolu] sur les sujets : ils pourraient décourager d'éventuelles lectures à quelqu'un qui ferait remonter le sujet.

Sinon, pour les codes longs, il faut utiliser la balise CODEBOX. j'ai édité tes messages en ce sens.

Posté

Merci Captain,

La balise s'écrit donc codebox ?

J'aime bien ta citation en passant ...

Salutations

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...