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 :

Perdu avec onload [Débutant(e)]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Points : 44
    Points
    44
    Par défaut Perdu avec onload
    Bonjour,

    Je suis débutant de chez novice en javascript.
    J'ai réussi à comprendre le html, les css par contre certaines choses sont floues. Cela histoire de vous situer mon niveau.

    A l'aide d'un tuto, je m'essaye donc au javascript.
    J'en arrive aux évènements et voila ce que l'on me propose de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="alert('Message');" onunload="alert('Message');">
    Je m'exécute, youpi ! cela marche super avec Firefox (version 12)
    Déjà, au lancement Internet Explorer (version 9) me renvoi un message d'erreur
    il me dit qu'il faut des quotes
    Ah ! c'est vrai, j'ai vu quelque part que l'on pouvait aussi écrire en inversant les guillemets et quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload='alert("Message");' onunload='alert("Message");'>
    Du coup, le onload se fait bien

    Première question donc
    dans quel cas utiliser l'une ou l'autre syntaxe et avantages et inconvénients des deux écritures ?

    Maintenant, j'ai un souci avec onunload qui n'affiche rien (toujours sur IE).
    J'ai lu un tas de trucs (y compris sur ce forum), mais je comprend rien. On me dit qu'il faut faire une fonction (bon ça j'ai à peu prés compris ce que c'était).
    J'entend parler d'Ajax, de callback, je vois 50 solutions différentes (3 jours que je suis planté dessus, j'en peu plus !) mais qui me semble toutes plus tordues les unes que les autres et en tout cas loin de mon tuto de départ.

    D'où seconde question, mon tuto est faux, et la solution n'est pas aussi simpliste que ça ?

    J'ai essayé une autre solution en haut de la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="javascript" type="text/javascript">
    	window.onload=window.alert("toto");
    </script>
    <script language="javascript" type="text/javascript">
    	window.onunload=window.alert("titi");
    </script>
    Du coup, les messages dans le body sont désactivés, mais window.onload et window.onunload se font tous les deux à l'ouverture de la page (dans les deux navigateurs).

    Donc encore une question, pourquoi window.onlad empêche body onload ?
    Et une subsidiaire, dans ce cas comment qu'on fait pour que la seconde se réalise bien à la fermeture de la page ?

    Là où je fais encore mon boulet !
    J'ai mis une zone de texte dans un formulaire pour essayer l'évènement onfocus. Enfin un truc qui marche.
    J'ai crée dans ma page au dessus du formulaire un lien pour tester onmouseover. Yes, j'suis trop fort, ça fonctionne !
    sauf que quand ma zone de texte est sélectionnée, et que je survol mon lien, et bien l'évènement du focus, se déclenche aprés celui du survol.
    C'est normal docteur ?

    Voilà beaucoup d'interrogations. Je commence à me dire que Javascript est à utiliser par des gens qui sont déjà développeurs.
    Si déjà à la deuxième page d'un tuto d'initiation, je rame autant sur des trucs aussi basique, je me dis qu'il vaut peut-être mieux que je passe mon chemin, et que j'en reste avec un petit site en html.

    Merci si certain peuvent m'aider, en essayant de tenir un discours que je puisse comprendre.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    Citation Envoyé par gambi Voir le message
    Déjà, au lancement Internet Explorer (version 9) me renvoi un message d'erreuril me dit qu'il faut des quotes
    Ah ! c'est vrai, j'ai vu quelque part que l'on pouvait aussi écrire en inversant les guillemets et quotes
    Déjà, je suis un peu surpris que IE te demande d'inverser les double quotes (") avec les simples quotes ('). Il n'y a aucune différence entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload='alert("Message")' >
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="alert('Message')" >
    Citation Envoyé par gambi Voir le message
    Première question donc
    dans quel cas utiliser l'une ou l'autre syntaxe et avantages et inconvénients des deux écritures ?
    aucun avantage ou inconvénient entre les deux écritures, c'est pareil. Après c'est selon les affinités de chacun. En ce qui me concerne, je préfère la seconde syntaxe (utiliser toujours des doubles quotes puis des simples quotes).



    Citation Envoyé par gambi Voir le message
    Maintenant, j'ai un souci avec onunload qui n'affiche rien (toujours sur IE).
    J'ai lu un tas de trucs (y compris sur ce forum), mais je comprend rien. On me dit qu'il faut faire une fonction (bon ça j'ai à peu prés compris ce que c'était).


    J'ai essayé une autre solution en haut de la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="javascript" type="text/javascript">
    	window.onload=window.alert("toto");
    </script>
    <script language="javascript" type="text/javascript">
    	window.onunload=window.alert("titi");
    </script>
    Première remarque : tu peux regrouper plusieurs instructions dans des balises script.
    Seconde remarque : l'attribut language est obsolète, supprime le.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script type="text/javascript">
    	window.onload=window.alert("toto");
    	window.onunload=window.alert("titi");
    </script>
    Citation Envoyé par gambi Voir le message
    Donc encore une question, pourquoi window.onlad empêche body onload ?
    Parce que le window.onload est équivalent à <body onload="alert('Message')"> et que window.onload() réattribue à l'événement onload à la fonction que tu as définie dans tes balises script.



    Citation Envoyé par gambi Voir le message
    J'entends parler d'Ajax, de callback, je vois 50 solutions différentes (3 jours que je suis planté dessus, j'en peu plus !) mais qui me semble toutes plus tordues les unes que les autres et en tout cas loin de mon tuto de départ.
    Tu vas trop vite. Ajax (Asynchronous JavaScript and XML) est utilisé pour développer des pages web au contenu dynamique. Comme tu débutes en javascript mets ceci de côté pour le moment (il y a des notions de client serveur à connaître). Apprends d'abord les bases de Javscript. Quand elles seront bien solides tu pourras de concentrer sur Ajax.


    Citation Envoyé par gambi Voir le message
    Là où je fais encore mon boulet !
    non, tu apprends, nuance
    Citation Envoyé par gambi Voir le message
    J'ai mis une zone de texte dans un formulaire pour essayer l'évènement onfocus. Enfin un truc qui marche.
    J'ai crée dans ma page au dessus du formulaire un lien pour tester onmouseover. Yes, j'suis trop fort, ça fonctionne !
    sauf que quand ma zone de texte est sélectionnée, et que je survol mon lien, et bien l'évènement du focus, se déclenche aprés celui du survol.
    C'est normal docteur ?
    Fais voir ton code, je n'ai pas très bien compris tes explications


    Citation Envoyé par gambi Voir le message
    Voilà beaucoup d'interrogations. Je commence à me dire que Javascript est à utiliser par des gens qui sont déjà développeurs.
    Si déjà à la deuxième page d'un tuto d'initiation, je rame autant sur des trucs aussi basique, je me dis qu'il vaut peut-être mieux que je passe mon chemin, et que j'en reste avec un petit site en html.
    Si tu te lances dans la création de site web (même petit), tu utiliseras forcément un peu de javascript, ne serait-ce pour donner un peu de vie (animations) au contenu.


    Citation Envoyé par gambi Voir le message
    Merci si certain peuvent m'aider, en essayant de tenir un discours que je puisse comprendre.
    Tu es au bon endroit

  3. #3
    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
    +1 Auteur !

    Sinon
    sauf que quand ma zone de texte est sélectionnée, et que je survol mon lien, et bien l'évènement du focus, se déclenche aprés celui du survol.
    C'est normal si tu fais un alert() pour le survol du lien, dans ce cas, le focus est donné à la boite d'alerte (et donc ton champ le perd), lorsque tu reviens sur ton champ le focus est donc rendu et l'événement lié déclenché.

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par gambi Voir le message
    Bonjour...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="alert('Message');" onunload="alert('Message');">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload='alert("Message");' onunload='alert("Message");'>
    Du coup, le onload se fait bien

    Première question donc
    dans quel cas utiliser l'une ou l'autre syntaxe et avantages et inconvénients des deux écritures ?
    Même reponse que Auteur et j'ajoute que le W3C dans la norme XHML indique que les attribut doivent être écrit avec des " et non des '

    les navigateur sont tolérents et acceptent les deux syntaxes. j'utilise toujours la syntaxe normalisée soit donc les "

    Citation Envoyé par gambi Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="javascript" type="text/javascript">
    	window.onload=window.alert("toto");
    </script>
    <script language="javascript" type="text/javascript">
    	window.onunload=window.alert("titi");
    </script>
    là par contre je suis très étonné
    tu affecte comme handler d'événement le résultat de l'exéution de window.alert("toto");
    je pense que ce que tu veux faire c'est
    Citation Envoyé par gambi Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script language="javascript" type="text/javascript">
    	window.onload=function() {window.alert('toto');};
    	window.onunload=function() {window.alert('titi');};
    </script>
    quelque soit l'événement sur le DOM click onload etc l'équivalent en javascript est toujours le même.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a id="45" href="#" onClick="alert('toto')" >
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('45').onclick=function(){alert('toto')};
    c'est exactement ce que fait le navigateur il lorsqu'il interprète le html
    il crée une nouvelle fonction donc le code est le texte inclus dans l'attribut d'evenement.

    A+JYT

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Tu affectes comme handler d'événement le résultat de l'exéution de window.alert("toto");
    je pense que ce que tu veux faire c'est :
    <script language="javascript" type="text/javascript">
    window.onload=function() {window.alert('toto');};
    window.onunload=function() {window.alert('titi');};
    </script>
    bien vu C'est cette syntaxe qu'il faut adopter. Par contre l'attribut language est en trop.


    Citation Envoyé par sekaijin Voir le message
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a id="45" href="#" onClick="alert('toto')" >
    onclick. Si je ne me trompe pas, il est recommandé d'écrire les attributs des balises HTML (ici un événement) en minuscules.

  6. #6
    Membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    Merci les "forumeurs" pour vos réponses rapides.
    Déjà, j'y vois un peu plus clair.
    Et je commence à m'amuser
    Déjà, je suis un peu surpris que IE te demande d'inverser les double quotes (") avec les simples quotes ('). Il n'y a aucune différence entre
    J'avais dû faire une erreur, maintenant ça fonctionne.
    Tu vas trop vite. Ajax (Asynchronous JavaScript and XML) est utilisé pour développer des pages web au contenu dynamique. Comme tu débutes en javascript mets ceci de côté pour le moment (il y a des notions de client serveur à connaître). Apprends d'abord les bases de Javscript. Quand elles seront bien solides tu pourras de concentrer sur Ajax.
    C'est en faisant mes recherches que je suis tombé sur ces termes. T'es tranquille qu'il y a peu de chance que je m'y lance

    Merci sekaijin pour tes explications claires, je teste dés que possible.

    C'est normal si tu fais un alert() pour le survol du lien, dans ce cas, le focus est donné à la boite d'alerte (et donc ton champ le perd), lorsque tu reviens sur ton champ le focus est donc rendu et l'événement lié déclenché.
    Yes super, j'ai compris. Mais comment faire alors pour éviter ce phénomène ?

    Encore merci à tous, et j'espère pouvoir mettre résolu quand j'aurais la réponse à ma dernière question.

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par gambi Voir le message
    Yes super, j'ai compris. Mais comment faire alors pour éviter ce phénomène ?

    Encore merci à tous, et j'espère pouvoir mettre résolu quand j'aurais la réponse à ma dernière question.
    tu peux poster le code (HTML et Javascript) qui correspond à ce problème ? J'avoue ne pas avoir très bien compris tes explications

  8. #8
    Membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    Merci de t'intéresser à mon problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <p><a href="#" onmouseover='alert("Survol");'>Survol</a></p>
    <form>
    <input type="text" value="On focus" onfocus='alert("Focus);'>
    </form>
    Quand je passe sur le lien, le message est correct.
    Quand je rentre dans la zone de texte, le message est correct.
    Mais si ensuite je repasse sur le lien, les deux messages s'affichent.
    D'abord celui sur le survol ensuite celui sur le onfocus.
    Si bien sûr, je sors de la zone de texte et repasse sur le lien, je n'ai que le premier message qui s'affiche.

    Sur le pourquoi j'ai bien compris, la réponse de Bovino, et c'est logique.
    C'est normal si tu fais un alert() pour le survol du lien, dans ce cas, le focus est donné à la boite d'alerte (et donc ton champ le perd), lorsque tu reviens sur ton champ le focus est donc rendu et l'événement lié déclenché.
    Donc je suppose qu'il faudrait pouvoir donner un ordre pour dire de sortir de la zone de texte après affichage du message (peut-être avec une ancre).

    Je suppose que c'est trivial comme problème, mais je n'ai rien trouvé. Peut être que je n'arrive pas à bien formuler ma requête dans google.

  9. #9
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Donc comme le disait Bovino, le alert prend le "focus" au champ input et une fois refermé, il lui rend (donc déclenche l’évènement).

    Ce comportement est logique et rarement gênant, car souvent utilisé pour effectuer de petits changements de style comme mettre le champ en cours en surbrillance plutôt qu'un alert. Il est donc normal après avoir refermé notre alerte que notre champ en cours se remette en sur brillant.

    En plus des évènements "onfocus" et "onblur"(l'inverse de onfocus, quand on perd le contrôle) il existe les méthodes pour forcer un controle ou pour le perdre :

    elem.blur();
    elem.focus();

    ------

    Après qqes tests, je me demande comment tu as pu arriver à cette situation, vu que lorsque tu cliques sur ton champs input, il fait un alert donc perd le focus et puis une fois l'alert refermé, il récupère le focus et redéclenche indéfiniment l'alert et tu peux donc pas survoler le lien.

    Note aussi que les alert ne sont pas des masses utilisés sur les sites, on préfère faire apparaitre un élément caché avec un message.

    ----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p><a href="#" onmouseover='alert("Survol");'>Survol</a></p>
    <form>
    <input type="text" value="On focus" onfocus='alert("Focus);'>
    </form>
    nb: Il manque un " dans ton alert("Focus)

    Enfin, tu peux récupérer l'élément actif avec document.activeElement, ainsi au survol de ton lien, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.activeElement.blur(); // supprime le focus de celui qui l'avait
    alert("machin chose"); // le alert qui normalement emprunte le focus et le rend ensuite, ne le rendra pas puisqu'on l'a supprimé à la ligne d'au dessus et tu n'auras pas ton problème.

  10. #10
    Membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    nb: Il manque un " dans ton alert("Focus)
    Merci, j'ai corrigé

    Après qqes tests, je me demande comment tu as pu arriver à cette situation, vu que lorsque tu cliques sur ton champs input, il fait un alert donc perd le focus et puis une fois l'alert refermé, il récupère le focus et redéclenche indéfiniment l'alert et tu peux donc pas survoler le lien.
    J'en sais rien, mais en tout cas, c'est ce que produit le code chez moi.

    Terrible le coup du document.activeElement.blur();
    Maintenant ça marche.

    Merci à toi et à tous ceux qui m'ont répondus.

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

Discussions similaires

  1. Complètement perdu avec le graphisme
    Par olympecomm dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 12/09/2006, 11h28
  2. Soucis avec "onload"
    Par cisse18 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 13/07/2006, 09h40
  3. [ODBC] Je suis perdu avec ODBC
    Par Nowhere dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/05/2006, 08h50
  4. Un peu perdu avec sql server!
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2005, 13h14
  5. Perdu avec la communication avec le port serie
    Par gilles641 dans le forum Langage
    Réponses: 8
    Dernier message: 23/08/2005, 20h11

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