11521 sujets

JavaScript, DOM et API Web HTML5

bonjour tout le monde,

voili voilou, apres avoir effectué quelques recherches, je ne trouve pas une solution à mon probleme...

Je m'explique Smiley langue

J'ai voulu utiliser 2 script sur mon site, mais les deux ne fonctionnent pas en meme temps... Smiley decu

voila le premier script, qui permet d'ouvrir une nouvelle page quand on clique sur un lien contenant class="lien_ext" :


<script type="text/javascript">
function open_ext_link()
{
	var liens = document.getElementsByTagName('a');
	// On r?cup?re tous les liens (<a>) du document dans une variable (un array), ici liens.
	// Une boucle qui parcourt le tableau (array) liens du d?but ? la fin.
	for (var i = 0 ; i < liens.length ; ++i)  {
		// Si les liens ont un nom de class ?gal ? lien_ext, alors on agit.
		if (liens[i].className == 'lien_ext')  {
			liens[i].title = 'Nouvelle fenetre';
			// Au clique de la souris.
			liens[i].onclick = function()  {
				window.open(this.href);
				return false; // On ouvre une nouvelle page ayant pour URL le href du lien cliqu? et on inhibe le lien r?el.
			};
		}
	}
}
window.onload = open_ext_link;
// Au chargement de la page, on appelle la fonction.
</script>


Le deuxième code est le script venant de alsacreations, pour afficher un bloc avec "javascript.onclick"

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


Voila, impossible de les utiliser en meme temps...j'ai essayé de changer une des 2 variables ( mais la variable doit etre interne, normalement ), j'avais quelques bases en java, mon pote m'a aidé a creer une fonction qui devrait lancer les 2...Résultat, ya aucun des 2 scripts qui se lancent... Smiley decu
voila le code :



<script type="text/javascript">
function appel()
{
	open_ext_link();
	montre();
}

function open_ext_link()
{
	var liens = document.getElementsByTagName('a');
	// On r?cup?re tous les liens (<a>) du document dans une variable (un array), ici liens.
	// Une boucle qui parcourt le tableau (array) liens du d?but ? la fin.
	for (var i = 0 ; i < liens.length ; ++i)  
	{
		// Si les liens ont un nom de class ?gal ? lien_ext, alors on agit.
		if (liens[i].className == 'lien_ext')  
		{
			liens[i].title = 'Nouvelle fenetre';
			// Au clique de la souris.
			liens[i].onclick = function()  
			{
				window.open(this.href);
				return false; // On ouvre une nouvelle page ayant pour URL le href du lien cliqu? et on inhibe le lien r?el.
			};
		}
	}
}

function montre(id) {
	var d = document.getElementById(id);
	
	for (var i = 1; i<=200; i++) 
	{
		if (document.getElementById('ep'+i)) {document.getElementById('ep'+i).style.display='none';}
	}
	
	if (d) 
	{
		d.style.display='block';
	}
}

window.onload = appel();
</script>




Voili voilou, ca marche toujours pas Smiley decu et j'aurai besoin de votre aide, je n'ai aucune notion en javascript... Smiley decu Smiley langue

mici
A++
Léo[/i][/i][/i][/i][/i][/i]
Modifié par leomac (06 Mar 2007 - 22:22)
Modérateur
Salut et bienvenue à toi leomac, Smiley smile

Tes scripts multiplient les appels à window.onload et ce n'est pas possible...

-> voir ici

PS : Attention lorsque tu mets des scripts sur le forum, le [ i] est le bbcode utilisé pour l'italique. Soit tu le mets avec un espace comme je viens de le faire, soit tu changes de lettre. Smiley cligne
ha oui et on écrit window.onload = appel;
et non:
window.onload = appel();

ou si non:

window.onload = function(){
appel();
open_ext_link();
};
Modifié par matmat (06 Mar 2007 - 21:15)
salut matmat,

en faite, j'ai mis les 2 scripts séparemment...chacun dans un <script> et c'etait le premier qui fonctionnait...

Ensuite, j'ai testé de les mettre dans une seule balise script, mais pareil, c'etait le premier script rencontré qui fonctionnait...

J'ai aussi changé les variables, peut-etre etait-ce du a la variable i utilisée dans les 2 script.

Je pense que le probleme vient du code : windows.onload = "blabla"

Apparemment, ca demande de lancer "blabla" quand la parge est totalement chargée...
Vu qu'il en rencontre un en premier, il va executer celui et tampis pour le deuxieme...
Alors on a fait avec un pote une fonction qui devrait executer les deux en meme temps...mais ca marche vraiment pas...


mici
+


EDIT : oops, j'etais un peu occupé, je n'ai lu que le premier msg, j'edite bientot Smiley cligne mici +
Modifié par leomac (06 Mar 2007 - 22:14)
excusez moi, j'etais occupé, j'avais commencé ma reponse, et je n'ai pas actualisé la page...

merci a tous pour les astuces, je teste ca tout de suite Smiley cligne

mici a+
Léo



EDIT : meeeerci ca fonctionne impec !

j'ai mis :

window.onload = function()
{
open_ext_link();
montre();
};

et nickel, tout marche !! zetes fort Smiley cligne


encore merci pour votre aide, a bientot
++
Léo
Modifié par leomac (06 Mar 2007 - 22:21)
Tu peux toujours utiliser ce super script : http://www.bennolan.com/behaviour/
Tu pourrais ainsi l'utiliser comme ceci :

var myrules = {
	'body' : function(el){
		appel();
		open_ext_link();
	}
};

Behaviour.register(myrules);

Ainsi tu ne t'occupe plus du window.onload...
Salut MoOx Smiley cligne

Merci pour le code, je vais aller matter le site du monsieur qui a crée le script Smiley cligne
je vais le tester en offline, mais je pense que je vais garder le premier code Smiley cligne il est vraiment compréhensif pour le peu de niveau que j'ai ( presque nulle ) en javascript Smiley langue

En tout cas, mici, je vais quand meme visiter Smiley langue tt facon, le javascript, je vais devoir y passer dans ma formation Smiley langue autant y commencer maintenant Smiley langue

encore merci, a++
Léo
Au fait MoOx, petit rappel, la librairie behavior, ça sert simplifier les selecteurs, elle offre par exemple, des getelementbyclassname et autres subtilitées, elle permet également de se débarasser des boucles lors de getelementbytagname.

C'est trés interressant quand on a des dizaines d'appels à des id des tag et des classes, ça simplifie la vie, par contre l'utiliser juste pour éviter un windows.onload quand on a deux petits scripts, ça sert pas à grand chose, ou au moins, dans ce cas réécrire ces fonctions avec le language de la bibliothéque histoire de vraiment s'en servir...

Ceci dit Behavior c'est super interressant comme projet.