Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/06/2011, 11h39   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Par défaut lancer fonction JS automatiquement

Bonjour !

Je cherche à lancer une fonction js sans onClick ou autre, à l'ouverture d'une page.
J'ai déjà essayé de faire onLoad='maFonction()' dans le body, sans résultat.

J'ai aussi essayé
Code :
1
2
3
<script type="text/javascript"> 
	openbox("", 1)
</script>
Or avec un onClick ca marche ! Cela ne vient donc pas de la fonction
Code :
<a id ='clic' name='clic' class="laclass" onclick='openbox("", 1)'>cliquer ici</a>
Il s'agit en fait d'une page avec un googleMaps, qui au click sur un point ouvre une lightbox, pour cela je fourni un id en $_REQUEST.

Voici le code du marqueur
Code :
1
2
3
4
5
6
7
8
9
function createMarker(point, title, id, n) {
	if(n >= 0) { n = -1; }
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
	document.location.href="vignerons2.php?ID="+id ;		
	}); 
 
	return marker;
}
Peut-être est-ce à cause du return?
Il n’empêche que de toutes façons j'arrive bel est bien sur ma page avec mon googleMaps et mon &_request bien présent, j'ouvre ma box seulement si cette variable est présente, et le onclick marche.

J'ai trouvé un problème similaire ici:
http://forum.webrankinfo.com/lancer-...nt-t83692.html

Mais ça ne m'a pas aidé.

J'ai découvert l'existence de la fonction doCLick(), qui est sensée simuler un click de l'utilisateur, mais impossible de trouver comment elle fonctionne... je ne sais pas si cela peut être la solution du problème
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 11h51   #2
 
Avatar de sylvain230
 
Homme Sylvain
Poitiers
Inscription : mai 2008
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Sylvain
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Poitiers
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mai 2008
Messages : 229
Points : -3
Points : -3
et si tu utilise une fonction du genre setInterval ?
sylvain230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 12h01   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Hum, si je comprend bien son utilité, je peux lancer des script toutes les x secondes? Cela ne va pas ouvrir plusieurs fois ma lightbox?
Le problème étant le même, je ne sais pas commenter lancer ma fonction, même en utilisant setInterval.

Qui plus est, j'ai lu que cette fonction posait des problèmes avec certains navigateurs (IE powa), or je travaille pour une boîte dont certains clients sont encore sous IE7 je préfère éviter.

Edit: je vais tester tout de même, histoire de voir si la fonction se lance si on l'appelle dans une autre fonction :O
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 12h09   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Cela fonctionne, ma box s'ouvre toute seule grâce à ça!

Y-a-t-il une autre solution que de mettre un timer enorme pour que la box reste affichée en continu?
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h32   #5
 
Avatar de sylvain230
 
Homme Sylvain
Poitiers
Inscription : mai 2008
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Sylvain
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Poitiers
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : mai 2008
Messages : 229
Points : -3
Points : -3
peut être un booléan. Au début tu le met a false et quand ta box est ouverte tu le met à true. Comme ca ta box ne sera ouverte qu'une fois.
sylvain230 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h35   #6
Responsable JavaScript & AJAX

 
Avatar de vermine
 
Inscription : mars 2008
Messages : 2 686
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2008
Messages : 2 686
Points : 5 756
Points : 5 756
Bonjour,

Si c'est le fait que la fonction se lance à intervalle régulier, pourquoi ne pas prendre setTimeout ? Ou bien vider le timer (clearTimer(timer)) ?
__________________
Elen Poukram - Isegoria - Sandawe
vermine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h41   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
Citation:
Envoyé par oni13
Qui plus est, j'ai lu que cette fonction posait des problèmes avec certains navigateurs (IE powa)
Ah...
Quels problèmes ?

Sinon, pour ton problème, il est probable que ça soit dû à l'appel du script avant que les éléments sur lesquels il travaille n'existent dans la page.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h46   #8
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
onload est infaillible, c'est l'événement de base en javascript;

quel dommage qu'on ne voie pas ta fonction openbox()...
__________________
On ne mord pas, on manifeste seulement notre tristesse face à des exposés de situations qui défient notre entendement binaire.
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h57   #9
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
Pas tout à fait JT.
Apparemment, il s'agit d'une carte Google, qui est donc chargée via un script, du coup tu peux avoir le onload de la page sans que la carte ai fini de se charger, d'où le problème rencontré
Mais il existe un événement déclenché par Google au chargement de la carte.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 13h57   #10
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Bovino, je n'en sais rien, mais:
setInterval() pose des problèmes de compatibilité avec certains navigateurs de version 4. Il est plus sûr d'utiliser setTimeout().
Effectivement ils proposent d'utiliser setTimeout mais j'espérais qu'il y aurait une solution plus... "normale".

Vermine
J'ai essayé d'utiliser clearTimer(timer) mais cela ferme ma box

Sylvain
je ne comprend pas, que faire de ce booléen?

je ne pensais pas que le code vous interesserait, mais voici donc le code pour la lightbox

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function gradient(id, level)
{
	var box = document.getElementById(id);
	box.style.opacity = level;
	box.style.MozOpacity = level;
	box.style.KhtmlOpacity = level;
	box.style.filter = "alpha(opacity=" + level * 100 + ")";
	box.style.display="block";
	return;
}

function fadein(id) 
{
	var level = 0;
	while(level <= 1)
	{
		setTimeout( "gradient('" + id + "'," + level + ")", (level* 1000) + 10);
		level += 0.01;
	}
}

// Ouverture lightbox

function openbox(formtitle, fadin)
{

  var box = document.getElementById('box'); 
  document.getElementById('shadowing').style.display='block';

  if(fadin)
  {
	 gradient("box", 0);
	 fadein("box");
  }
  else
  { 	
    box.style.display='block';
  }  	
  
}
// Fermeture lightbox

function closebox()
{
   document.getElementById('box').style.display='none';
   document.getElementById('shadowing').style.display='none';
}
Et le CSS
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#shadowing
{
	display: none;
	position: absolute;
	top: 0;
	left: 0;
	width: 1600;
	height: 1200;
	background-color: #CCA;
	z-index:10;
	opacity:0.5;
	filter: alpha(opacity=50);
}
 
 
#box 
{
	display: none;
	position: absolute;
	top: 15%;
	left: device-width/2;
	width: 550;
	height: 600;
	margin:0;
	border: 1px solid black;
	background-color: white;
	z-index:101;
	overflow: auto;
}
Edit:
Je trouve tout de même étrange que
Code :
1
2
3
<script type="text/javascript"> 
	var timer=setInterval("openbox(' ', 1)", 1000);
</script>
Fonctionne, et pas:
Code :
1
2
3
<script type="text/javascript"> 
	openbox(' ', 1), 1000);
</script>
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h08   #11
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 803
Points : 35 803
Citation:
Envoyé par oni13
Bovino, je n'en sais rien, mais:
setInterval() pose des problèmes de compatibilité avec certains navigateurs de version 4. Il est plus sûr d'utiliser setTimeout().
Effectivement ils proposent d'utiliser setTimeout mais j'espérais qu'il y aurait une solution plus... "normale".


Essaye de te renseigner sur la date de dernière mise à jour des informations de ce site
D'autre part, connais-tu les stats d'utilisation actuelle d'IE4 et Netscape4...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h16   #12
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
A vrai dire, je ne pensais pas qu'il parlait d'IE4 mais plutot de firefox 4.
Je me suis inquiété pour rien alors ^^
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h34   #13
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

L'évenement onload est peut-être remplacé par une autre partie du code.

Placer le code ci-dessous dans la partie <head> pour voir...
Code js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
function addLoadListener(func){
	if(window.addEventListener)
		window.addEventListener('load',func,false);
	else if(document.addEventListener)
		document.addEventListener('load',func,false);
	else if(window.attachEvent)
		window.attachEvent('onload',func);
	else if(typeof window.onload!='function')
		window.onload=func;
	else{
		var oldonload=window.onload;
		window.onload=function(){oldonload();func();};
	}
}
 
addLoadListener(function(){openbox('',1);});
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/06/2011, 14h41   #14
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Génial, ça fonctionne. Merci beaucoup!

Pouvez-vous m'expliquer rapidement comment est survenu ce problème?

En tout cas merci à tous de vous être penché là dessus, ça m'a fait apprendre des choses
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 16h18   #15
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Soit le gestionaire d'évenement a été écrasé, soit il a été activé trop tôt.


La fonction addLoadListener ajoute un gestionnaire (fonction) pour l'événement onload de l'objet window.

Ce évenement se déclenche une fois le document et tous ses composants chargés dans le DOM.

Remarque :
L'utilisation de seTimeout ou setInterval est, comme nous l'avons constaté, fort pratique. Cela nous permet de différer l'éxecution d'une fonction.

Si, au pire, un élément requis par la fonction openbox n'était toujours pas immédiatement disponible, nous aurions :

Code js :
1
2
 
addLoadListener(function(){setTimeout(function(){openbox('',1);},1000);});

afin d'appeler la fonction openbox une seconde (pour l'exemple) après le chargement de la page et tous ses composants.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/06/2011, 16h35   #16
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 10
Points : 10
Ah je comprend maintenant pourquoi cela fonctionnait avec le setInterval.

Même si ça reste flou je comprend le principe, ainsi je saurai d'ou peut venir le problème à l'avenir.

Encore merci
oni13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h28.


 
 
 
 
Partenaires

Hébergement Web