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] DOM : Trouver le champ qui suit un champ


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut [DOM] DOM : Trouver le champ qui suit un champ
    Bonjour,

    Je développe un composant AJAX composé d'un champ texte et trois champs chachés. La touche "Entrée" est utilisé pour autre chose que la soumission du formulaire, j'utilise donc un script qui permet d'empecher cette soumission. J'aimerai aussi que l'appuie sur cette touche envoie le focus sur le champ suivant à la manière de la touche "tab".
    Le problème est ke je ne connais pas l'id du champ suivant (puisque je développe un composant). A priori, il y en a forcément un (le bouton submit) et même s'il y en a pas, j'aimerai que la touche Entrée ait le meme role que la touche Tab.
    J'ai pas envie de donner le focus à un champ caché : j'ai essayé et le focus se perd et recommence en début de page.

    Je vous donne ci dessous le code actuel pour empecher la touche Entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    document.getElementById("champ-texte").onkeypress=function(e){
    	ev= e ? e.which : event.keyCode;
            if(ev==13 || ev==3){
    		document.getElementById('num_voie').focus();
    		this.form.onsubmit=function(e){
    			ev= e ? e.which : event.keyCode;
    			if(ev==13 || ev==3){
    				return false;
    			}
    		}
    		return false
    	}
         }

    Merci beaucoup pour votre aide !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    aucune idée ?

  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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    a tout hasard nextSibling avec un nodeCleaner avant ?
    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 régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    Je peux avoir plus de précision sur le nodecleaner s'il te plait ?
    C'est pour épurer le DOM et ne récupérer que ce que l'on souhaite ?

    Ce que je voudrais c'est que lorsque lutilisateur appuie sur Entrée sur mon champ, le focus soit donné au prochain champ input, s'il existe. Sinon je bloque juste la touche Entrée comme c'est le cas actuellement.

  5. #5
    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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    un nodeCleaner est un petit script qui nettoie le DOM de sorte que IE et Firefox retournent les mêmes élément, car ils n'on à la base pas la même interprétation des nodes ...

    Il doit y avoir un script dasn la faq ou dans les codes sources ...

    ainsi en recupérant le nextSibling il ne te reste plus qu'a tester si il s'agit d'un input ...
    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 !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    Ok je vois ce ke tu veux dire.
    Le nodeCleaner sert alors à uniformiser la valeur du nextSibling entre les différents navigateurs.
    As tu une idée pour tester le type d'un élément, à savoir s'il s'agit d'un input ou autre chose ?
    j'ai cherché sur le net et j'ai pas trouvé gd chose.
    Je sais qu'on peut récupérer tous les éléments d'un certain type avec la méthode getElementsByTagName("input") au sein d'un élément. Peut etre que je peux regarder dans ce tableau (je suppose que l'objet retourné est un tableau d'objet input ?) si je trouve mon nextSibling... Mais y a t il une méthode plus simple du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (document.getElementById("blabla").nextSibling.type == "input") { blabla }
    ??

    Merci pour les réponses

  7. #7
    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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    nodeName ....
    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 !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    Merci !
    J'ai créé cette petite fonction pour récupérer le prochain élément input par rapport à mon élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			while (elt.nextSibling.nodeName != "INPUT") {
    					elt = elt.nextSibling;
    					if (elt == NULL) elt = elt.parentNode.nextSibling.firstChild;
    					alert(elt.nodeName);
    				}
    Mais il ne marche pas
    Aucun alert, aucune erreur..
    Vous voyez qqch qui ne va pas ?

  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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    as tu déja testé le retourn de nextSibling ?
    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
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    ou i et il est pas nul. Il me retourne un type text. C'est le texte de l'input.

  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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    ben là tu testes si il est null...
    si il est pas null il ne se passe rien c'est normal non ?
    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 !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Points : 99
    Points
    99
    Par défaut
    L'alert devrait tout de même générer une boite de dialogue !

  13. #13
    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 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 638
    Points : 66 667
    Points
    66 667
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (elt.nextSibling.nodeName != "INPUT") {
    					elt = (elt.nextSibling)?elt.nextSibling:elt.parentNode.nextSibling.firstChild;
    					alert(elt.nodeName);
    				}
    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 !

  14. #14
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Ceci marchera sans doute mieux (mais c'est sans doute encore à améliorer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    getNextField=function(h) {
        if (!h) {return h; }
        while (h.nextSibling) {
            h=h.netSibling;
            if (h.tagName && h.tagName.toLowerCase()=="input") {
                 return h;
            } else if (h.firstChild) {
                 var t=getNextField(h.firstChild); if (t) { return t; }
            }
        }
        return getNextField(h.parentNode);
    }
    PS: avec ca, pas besoin de node cleaner
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. [AC-2010] Champ qui alimente un champ d'une table
    Par mcharmat dans le forum IHM
    Réponses: 6
    Dernier message: 03/12/2013, 00h07
  2. [DOM] [IE6] Définir l'attribut type d'un champ input
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/01/2008, 17h27
  3. [DOM] Contenu des "input file" qui s'effacent
    Par cathy9999 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/07/2007, 09h30
  4. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48
  5. [DOM] Où trouver la classe DomDocument ?
    Par naima2005 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/05/2006, 19h33

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