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 :

Etendre un objet (DOM)


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Par défaut Etendre un objet (DOM)
    Bonjour,

    Dans un formulaire de contact qui contient les champs "votre mail" et "votre message" (input et textarea), je voudrais étendre ces objets pour leur ajouter un attribut. Le problème c'est que je n'ai réussi à le faire qu'en passant par l'objet Element. Du coup tous les tags HTML sont étendus ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	// augmente l'objet Element de l'Attribut : regEx
    	Element.prototype.regEx = "";
    Comment faire pour étendre uniquement les champs de mon formulaires ?
    D'avance merci.

  2. #2
    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
    Billets dans le blog
    20
    Par défaut
    Avant de te répondre, il serait bon de comprendre exactement ce que tu cherches à faire parce que là, c'est pas très clair...
    Ceci dit, ta bribe d'explication semble indiquer que tu cherches à réinventer la roue, en particulier l'attribut HTML5 pattern.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, 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
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  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
    soit pattern pour forcer un format ...

    ou si il s'agit juste d'un attribut il y a aussi data-nomattribut
    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 habitué
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Par défaut
    Merci pour vos réponses, pour info l'idée est d'accompagner l'utilisateur avec un message d'info lorsque le champ est actif (onfocus) et un message de feedback dès qu'il le quitte (onblur). Ces messages sont dans des div, masqués en css.

    Du peut d'essai que j'ai réalisé avec pattern (html5) je n'arrivais à afficher le feedback qu'au submit, pour un long formulaire c'est un peu tard.

    L'attribut data semble intéressant ... je vais creuser

    Néanmoins, j'aimerais quand même bien savoir comment étendre précisément un objet DOM sans passer par l'objet Element ...

  5. #5
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Étendre les objets natifs du DOM est une mauvaise pratique ... (même si Prototype, Mootools l'ont fait, mais c'est un autre débat).
    Une bonne pratique, comme le fait jQuery, est de créer un "wrapper" qui permet d'utiliser des fonctions personnalisées sur un élément ou une collection d'élément.

    Ou plus simplement, directement attacher des événements aux éléments ciblés :
    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
    // Attacher un événement à un élément
    var bindEvent = function( element, type, eventHandler ) {
      if ( element.addEventListener ) {
        element.addEventListener( type, eventHandler, false );
      } else if ( element.attachEvent ) {
        element.attachEvent( "on" + type, eventHandler );    
      }
    };
     
    bindEvent(document.getElementById('votre_mail'), 'focus', function (evt) {
      console.log('sélectionner votre mail');
    });
     
    bindEvent(document.getElementById('votre_mail'), 'blur', function (evt) {
      if (evt.currentTarget.value === '') { // ou regEx
        console.log('Le champ est toujours vide ou pas au bon format !');
        evt.currentTarget.style.backgroundColor  =  '#f00';
      } else {
        evt.currentTarget.style.backgroundColor  =  '#fff';
      }
    });

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    +1 pour un wrapper plutôt que de modifier le prototype

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function SuperChamp(element, regex){
        this.element = element;
        this.regex = regex;
     
        bindEvent(element, 'focus', function(){
            //faire ce que tu veux avec ta regex ou d'autres infos
        });
    }
     
    var monSuperChamp = new SuperChamp(document.querySelector('input.email'), emailRegEx);

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

Discussions similaires

  1. Detecter le poids d'une image avec l'objet DOM
    Par crimsonPhantom dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/07/2006, 16h54
  2. [DOM] objets DOM et firefox
    Par Teppic dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/07/2006, 14h50
  3. Créer d'objets DOM à partir d'XHTML sous forme de chaîne
    Par Oscar Hiboux dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 29/03/2006, 15h04
  4. [DOM] Changement du background grâce a l'objet DOM style
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 19/12/2005, 16h31
  5. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43

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