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 :

[DOM] Ajouter un event à une class


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut [DOM] Ajouter un event à une class
    Bonjour,

    alors voilà, j'aimerais faire le truc suivant: avoir pour une page qui a une entry form, que tous les champs réagissent à la même fonction lors d'un onFocus.

    j'ai bien sur la solution de mettre pour tous les <input> un onFocus="gotFocus();", mais je voudrais savoir s'il n'y a pas moyen de mettre l'event dans une class ? et que tous les <input> de la page ai l'event onFocus déjà déclaré ?

    merci

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    mais je voudrais savoir s'il n'y a pas moyen de mettre l'event dans une class ? et que tous les <input> de la page ai l'event onFocus déjà déclaré ?
    -un événement sur une classe
    -que les input aient l'événement on focus déjà déclaré

    Que veux-tu faire ??

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    mettre dynamiquement une fonction à tous les elements dans leur onfocus sur le onload de la page ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Voilà, c'est ça.

    Donc, j'ai une form avec 10 <input>.

    je veux que pour chaque input, quand on est dedans, un border apparait, et disparait quand on sort du champ.

    je l'ai fait "facilement" avec un onFocus="gotFocus(this)" pour mettre le border et un onBlur="lostFocus(this)" pour le retirer.

    les fonctions gotFocus et lostFocus étant déclarés avant biensur

    mais, je dois déclarer les appels pour les 10 champs.

    je me demandais si je ne pourrais pas déclarer mes champs <input class="avecBorder"> et que cette class ai déjà les appels pour les onBlur et onFocus.

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Je vois deux solutions à ton problème

    1) Pure CSS avec

    input.avecBorder:focus { border: 1px solid red; }

    ce qui ne fonctionne pas sur IE6 sauf erreur

    2) Javascript, comme l'a dit SpaceFrog, ce qui ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function initFocus() {
      var fields = document.getElementsByTagName('input');
      for(var i=0;i<fields.length;i++) {
        // tester qu'il s'agit bien d'un input avec la classe avecBorder ici
        fields[i].onfocus = gotFocus; // addEventListener serait meilleur aujourd'hui
        fields[i].onblur = lostFocus;
      }
    }
     
    ...
    <body onload='initFocus()'>
    L'approche javascript pose quelque problèmes de compatibilité entre les
    navigateurs qu'il faut gérer. Je te suggère de lire ceci

    http://gilles.chagnon.free.fr/cours/...venements.html

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    L'approche javascript pose quelque problèmes de compatibilité entre les
    navigateurs qu'il faut gérer.
    heu non pas de soucis de compatibilité si tu utilise cette syntaxe::




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fields[i].onfocus = function(){gotFocus()};
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    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 684
    Par défaut
    sans doute rien compris à ce que tu veux;

    pourquoi ce type de code ne conviendrait pas?

    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
    <style type="text/css">
     
     
    #champs input {
    margin-top:5px;
    border:1px solid;
    }
     
     
    </style>
     
    </head>
     
    <body>
     
     
     
    <form id="f" action="">
    	<div id="champs">
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" /><br />
    		<input type="text" />
    	</div>
    </form>
     
    <script type="text/javascript">
     
     
     
    var ch=document.getElementById("f").elements;
     
    for(i=0;i!=ch.length;i++){
    	ch[i].onfocus=function(){this.style.borderWidth="4px"}
    	ch[i].onblur=function(){this.style.borderWidth="1px"}
    }
     
    </script>

  8. #8
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par javatwister
    sans doute rien compris à ce que tu veux;
    Pour quelqu'un qui n'a rien compris tu t'en sors bien

    Je pense que ta solution est idéale.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Ben c'est pas ce que l'on dit depuis le début ça ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par SpaceFrog
    Ben c'est pas ce que l'on dit depuis le début ça ?
    En partie. Tu as donné dés ton premier post (même si c'est pas détaillé) la solution pour appliquer une même fonction à tous les champs.

    Mais ce que javatwister apporte de concret en plus, c'est une manière simple
    d'agir sur le champ input qui a appelé la fonction.

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    en passant this en paramètre ...

    je vais me recycler dans le macramé ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. WCF - Ajout Reference sur une Class Library
    Par fix105 dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 20/03/2009, 12h20
  2. Ajout de méthodse à une classe sans dérivation
    Par plxpy dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 11/01/2009, 21h14
  3. comment ajouter des méthodes à une classe lors Runtime?
    Par revever dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/03/2008, 13h53
  4. [DOM] Ajout dynamique d'une ligne dans un <table>
    Par Alzelus dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/05/2007, 17h05
  5. Réponses: 2
    Dernier message: 20/04/2007, 01h09

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