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 :

Script fonctionne que si il se trouve après l'élément


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 137
    Points : 70
    Points
    70
    Par défaut Script fonctionne que si il se trouve après l'élément
    Hello

    Je suis Couin, de l'Essonne (91), passionné de divers bricolages en tout genre, un peu d'informatique aussi

    Et aujourd'hui je bute sur un problème qui fera l'objet de mon (il me semble, lol) premier message .

    Voilà, je veux changer la couleur de fond d'un champ input suite à une opération, mais cela ne marche pas.

    J'ai donc fouiné sur le net, j'ai fais un script minimaliste pour que le champ soit coloré au chargement de la page.

    La seule façon qui a donné un résultat est de mettre le script après l'élement :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Bla</title>
    </head>  
    <body>
    <input type="text" id="champ" value="">
    <script type="text/javascript">
            document.getElementById("champ").style.backgroundColor = "yellow";
    </script>
    </body>
    </html>
    Là ca marche, le champ a le fond jaune.

    Si je mets le script avant le input, (que ce soit dans le body ou le head), il ne se passe rien.
    Idem si je fait directement un onclik dans la balise input.

    Si je mets un témoin alert comme ceci :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Bla</title>
    <script type="text/javascript">
    alert('poc');
    document.getElementById("champ").style.backgroundColor = "yellow";
    </script>
    </head>  
    <body>
    <input type="text" id="champ" value="">
    </body>
    </html>
    J'ai bien l'alert qui s'affiche mais le champ reste blanc.

    Si quelqu'un a une idée , je suis preneur

    Merci et à bientôt !

    Couin

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 890
    Points : 3 729
    Points
    3 729
    Par défaut
    Salut,

    Je n'ai pas compris quelle était la question ?

    Sinon ce que tu décris est normal un script qui agit sur des éléments du DOM doit être exécuté après que ces derniers aient été chargés dans le DOM et pour ce faire tu as plusieurs manières, tu peux placer le script après les éléments sur lesquels il agit ou utiliser par exemple l’évènement onload...

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Le comportement est normal, dans le deuxième cas vous sélectionner un ID qui n'existe pas encore !

    Vous devez exécuter votre code après la construction du DOM :

    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
    <script defer>
    document.addEventListener('DOMContentLoaded', ev => {
        // le DOM est construit, la page web n'est pas visible
     
        // votre code
        document.getElementById("champ").style.backgroundColor = "yellow";
     
    }, {
        capture: false,
        passive: true,
        once: false
    });
     
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // votre code
    }, {
        capture: false,
        passive: true,
        once: false
    });
    </script>

  4. #4
    Membre régulier Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 137
    Points : 70
    Points
    70
    Par défaut
    Hello,

    Merci pour vos réponses rapides

    En effet le code de l'exemple fonctionne .

    Dans mon utilisation finale, je vais essayer d'expliquer car c'est un pneu tordu lol

    Il s'agit de lister des titres de disque à la demande (site webradio), et de faire la demande d'un titre souhaité.

    En gros j’ai une page index.php avec quelques scripts qui appellent une page srch.php (via ajax), avec divers variables POST.
    La page srch.php inclut plusieurs parties, chacune étant sollicitée selon le type de variables passées en POST :
    - Lister les titres en fonction de la recherche et de la page (car on affiche 15 titres par page donc si la recherche donne plsu de 15 titres, il y a autant de pages que nécessaires).
    - Afficher un formulaire lorsqu'on souhaite demander un titre. Dans le formulaire, on doit mettre le nom du demandeur, pour qui est la musique, et si on veut mettre un petit message avec. Les deux premiers champs sont obligatoire. Le formulaire n'est pas de type "form" car le submit rechargeait toute la page (index.php) à la validation et ca ne me plaisait pas. Le bouton de validation appelle simplement une fonction javascript.
    - Récupérer les valeurs des champs du formulaire lorsqu'on clique sur le bouton de validation. Si l'un des champs obligatoires est vide, une petite infobulle l'indique, et quand on ferme la bulle, le champ à remplir se mets en rouge. L'idée étant que lorsque l'on clique sur le champs à remplir, il repasse en blanc.
    - Si les champs sont remplis, la page analyse les données via diverses requêtes, enregistre la demande si les données sont valides, et affiche le résultat (succès ou erreur).

    Donc finalement j'ai mis la fonction de colorisation des champs, à la suite de la partie "formulaire" et non plus dans index.php . Ainsi, les champs sont existants lorsqu'on arrive à la fonction javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    function bgfield(elm,col,value) {
    	if ( value != '') {
    	document.getElementById(elm).style.backgroundColor = col;
    	}
    }
    </script>
    elm désigne l'élement, col, la couleur, et value, la valeur du champs input.

    J'ai une autre petite question mais je vais ouvrir un nouveau sujet pour pas que ce soit hors sujet par rapport à celui ci.

    Merci en tout cas

    A bientôt

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

Discussions similaires

  1. script ne fonctionne que sous IE ,Maxthon et Opera
    Par sp2308 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/02/2012, 18h18
  2. Réponses: 1
    Dernier message: 26/03/2009, 15h48
  3. Réponses: 4
    Dernier message: 22/05/2007, 14h27
  4. Help: Script d'arborescence ne fonctionnant que sur Internet Explorer
    Par cyrilk dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2006, 19h28
  5. postgresql v8 pour windows ne fonctionne que 8 jours ?
    Par Guitch dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/10/2004, 10h48

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