IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

lancer fonction JS automatiquement


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Nouveau membre du Club Avatar de sylvain230
    Homme Profil pro
    Orléans
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Orléans
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Points : 30
    Points
    30
    Par défaut
    et si tu utilise une fonction du genre setInterval ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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?

  5. #5
    Nouveau membre du Club Avatar de sylvain230
    Homme Profil pro
    Orléans
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Orléans
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Points : 30
    Points
    30
    Par défaut
    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.

  6. #6
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 915
    Points
    79 915
    Par défaut
    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)) ?

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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.

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    onload est infaillible, c'est l'événement de base en javascript;

    quel dommage qu'on ne voie pas ta fonction openbox()...

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript"> 
    	var timer=setInterval("openbox(' ', 1)", 1000);
    </script>
    Fonctionne, et pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript"> 
    	openbox(' ', 1), 1000);
    </script>

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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...

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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 ^^

  13. #13
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);});

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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

  15. #15
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lancer un clip automatiquement
    Par Tony. dans le forum Flash
    Réponses: 5
    Dernier message: 13/10/2006, 16h57
  2. [PHP] Lancer un script automatiquement
    Par skynicko dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2006, 14h58
  3. [Apache] Lancer des scripts automatiquement
    Par Jim_Nastiq dans le forum Apache
    Réponses: 2
    Dernier message: 16/05/2006, 13h35
  4. [PowerBuilder] [Débutant] Lancer fonction
    Par bejnat dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 04/10/2005, 14h21
  5. lancer fonction sans trigger
    Par $grm$ dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/04/2005, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo