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 :

Trouver valeur id dans frère ascendant


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut Trouver valeur id dans frère ascendant
    Bonjour,

    J'ai ce code html (simplifié).

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tr>
    <td><input type="radio" name="super" value="COMTFV006SM-D" id="ACOMTFV006SM-D"  /></td>
    <td>6 fibres, OS2 (9 / 125), Str. serr&eacute;e &gt;&gt; <input type="text" size="4" name="unit[COMTFV006SM-D]" id="UCOMTFV006SM-D" /> m</td>
    </tr>

    Au click dans l'input type = text je veux que l'input type = radio soit automatiquement sélectionné (checked).

    j'ai fait ce que j'ai pu avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const tex = document.querySelectorAll ('input[type="text"]');
     
    for (let i = 0; i < tex.length; i++)
    {	
    tex[i].addEventListener('click', function ()
    {
    const id_radio = this.parentNode.parentNode.children.children.id;
     
    document.getElementById (id_radio).checked=true;
    }
    );
     
    }
    Ne marche pas.
    Si vous pouvez me dire où est l'erreur, merci d'avance.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Entre nous recherche plutôt l'id correspondant vu qu'il n'y a que la 1ere lettre qui change.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour Javatwister,

    Bonne suggestion, merci.
    Il faut que je vérifie si c'est toujours la première lettre qui change mais je crois que c'est le cas.

    Autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const id_Radio = this.parentNode.parentNode.querySelector('input[type=radio]').id;
    Cela fonctionne.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Oui, pas mal;

    Sinon:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tex[i].addEventListener('click', function ()
    {
    document.getElementById(this.id.replace(/^./,"A")).checked=true;
    }

    Mais je ne sais pas si le nommage est aussi rationnel dans tout ton document;

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour Javatwister,

    Merci de ton suivi.

    On prend la référence fabricant et on ajoute devant A ou U pour différencier les deux id.

    On peut donc d'en sortir avec substr.

    Comme d'habitude j'attends avant de cocher résolu.

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    non mais je t'assure, tu peux copier le dernier code;

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const tex = document.querySelectorAll ('input[type="text"]');
     
    for (let i = 0; i < tex.length; i++)
    {	
    tex[i].addEventListener('click', function ()
    {
    document.getElementById(this.id.replace(/^./,"A")).checked=true;
    }
    );
     
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bien compris.

    Encore merci.

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    J'ai ce code html (simplifié).
    j'espère qu'il est bien simplifié car j'en conclu que si je clique dans l'<input> je n'ais plus d'espoir de décocher le <input type="radio"> !?!

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour NoSmoking,

    Je confirme que c'est simplifié.

    Il y a x lignes avec boutons radio.

    Par ailleurs il y a un bouton submit.

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Si les radios sont liés, même name, alors cela devrait le faire pour une mono sélection.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    C'est le cas.

    Le code de Javatwister ou le mien fonctionnent pour chaque ligne et quel soit le nombre de lignes.

  12. #12
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Mais NoSmoking a raison sur la nécessité (?) d'un événement blur, par exemple;

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Je suis à l'écoute de vos suggestions.

    Mais là il s'agit d'un formulaire qui ne pose aucun problème d'ergonomie.

    Je vous enverrai un lien quand le boulot sur les javascripts sera terminé, de fait je n'ai pas trop le temps de m'en occuper pendant la semaine.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,


    L'objet est d'externaliser les javascript de ce code :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <td>
    <input type="radio" name="super" value="12-OS1-S-EXT-DG" id="A12-OS1-S-EXT-DG" onclick="this.form.elements['U12-OS1-S-EXT-DG'].focus();this.form.elements['F824'].value='12';" />
    </td>
    <td>12 fibres, OS1 (9 / 125), Str. serr&eacute;e &gt;&gt; <input type="text" size="4" name="unit[12-OS1-S-EXT-DG]" id="U12-OS1-S-EXT-DG" onclick="if(this.form.elements['A12-OS1-S-EXT-DG'].checked==false || this.form.elements['F824'].value=='') {this.form.elements['A12-OS1-S-EXT-DG'].checked=true;this.form.elements['F824'].value='12';}" /> m
    </td>
     
    <p class="at"><input type="checkbox" name="prec[824][at]" value="BO" id="prec824" /><label for="prec824"> Je demande une pr&eacute;connectorisation</label> sur <input type="text" size="2" name="prec[824][F]" id="F824" /> fibres <span id="at824">(d&eacute;cocher cette ligne pour annuler votre demande)</span></p>


    Cliquer dans le radio donne le focus au text de la même ligne et renseigne une valeur dans le text name="prec[824][F] plus bas.
    Cliquer dans le text sélectionne le radio sur la même ligne et renseigne une valeur dans le text name="prec[824][F] plus bas.
    Cela marche très bien avec les phrases magiques dans le html


    Ce codepen illustre mon problème d'externalisation.

    Clic dans le radio : tout marche
    Clic dans le text : sélectionne bien le radio mais ne donne pas la valeur à name="prec[824][F] plus bas.

    Bien sûr la structure html a un peu changé.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    J'ai trouvé une solution :

    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
     
    const idPreco = document.getElementById ('F'+ ca_id);
     
    const tex = document.querySelectorAll ('table.compcab input[type=text]');
     
    for (let i = 0; i < tex.length; i++)
    {	
    tex[i].addEventListener('click', function ()
    {
    const Radio = this.parentNode.parentNode.querySelector('input[type=radio]');
    const idImg = Radio.id.split ('--');
     
    idPreco.value=idImg[2];
    document.getElementById(Radio.id).checked=true;
    }
    );
    }
     
     
    const rad = document.getElementsByName ('super');
     
    for (let i = 0; i < rad.length; i++)
    {	
    rad[i].addEventListener('click', function ()
    {
     
    const idRadio = 'U'+this.value;
    const idImg = this.id.split ('--');
     
    document.getElementById (idRadio).focus ();
    idPreco.value= idImg[2];
    }
    );
    }



    Je fais donc deux boucles en calculant un peu les mêmes choses dans chaque boucle.

    Je me demande s'il n'est pas possible de faire une seule boucle.

    Mais cela marche, voir le codepen.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Je coche Résolu mais il existe peut-être une meilleure solution.

  17. #17
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Franchement, je simplifierais comme ça... http://javatwist.imingo.net/prisedetete.htm

    et encore! Les champs du tableau n'ont pas besoin d'id...

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Merci pour ton code, je regarde ce week-end à tête reposée.

    Le click dans le checkbox doit aussi provoquer le focus dans le text, ton code ne le fait pas (mais il fait tout le reste).

  19. #19
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par boteha Voir le message
    Le click dans le checkbox doit aussi provoquer le focus dans le text, ton code ne le fait pas (mais il fait tout le reste).
    C'est inutile; d'ailleurs, le champ devrait être en readonly puisqu'il doit correspondre uniquement à une valeur sélectionnée.

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Le text name="unit[...] sert à indiquer la longueur du câble.
    Le text name="prec[...] sert à indiquer le nombre de fibres à connecter.

    Ce n'est pas du tout le même paramètre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Trouver valeurs d'une table n'existant pas dans une autre table
    Par aliasjcdenton dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/10/2011, 10h41
  2. Trouver valeur seuil dans un t-test
    Par metty45 dans le forum MATLAB
    Réponses: 0
    Dernier message: 01/06/2010, 20h12
  3. Réponses: 13
    Dernier message: 11/04/2009, 19h03
  4. Trouver une valeur majoritaire dans une liste
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 22/08/2007, 17h48
  5. Trouver la valeur maximale dans une matrice
    Par VanessaDu67 dans le forum MATLAB
    Réponses: 3
    Dernier message: 06/06/2007, 10h23

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