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 :

Lien dans un input


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut Lien dans un input
    Bonjour,

    J'ai un code pour rechercher un nom dans une liste à l'aide d'un input, qui fonctionne très bien j'aimerai lui apporter une modification.
    Suite à la recherche je voudrais cliquer sur lr nom pour ouvrir la page?

    Mon code
    Code html : 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
    45
    46
    47
    48
     
    <!DOCTYPE html>
    <html>
    <title>Recherche</title>
     
    <body>
     
    <div class="w3-container">
      <h2>Filtrer une Liste</h2>
      <p>Rechercher un nom dans le champ de saisie.</p>
     
      <input  type="text" placeholder="Chercher un noms..!" id="myInput" onkeyup="myFunction()">
     
      <ul  id="myUL">
        <li>Adele</li>
        <li>Agnes</li>
        <li>Bil</li>
        <li>Bob</li>
        <li>Calvin</li>
        <li>Christine</li>
        <li>Cindy</li>
    	<li>Max</li>
    	<li>Michelle</li>
    	<li>Maurice</li>
    	<li>Pierre</li>
    	<li>louis</li>
      </ul>
    </div>
     
    <script>
    function myFunction() {
        var input, filter, ul, li, a, i;
        input = document.getElementById("myInput");
        filter = input.value.toUpperCase();
        ul = document.getElementById("myUL");
        li = ul.getElementsByTagName("li");
        for (i = 0; i < li.length; i++) {
            if (li[i].innerHTML.toUpperCase().indexOf(filter) > -1) {
                li[i].style.display = "";
            } else {
                li[i].style.display = "none";
            }
        }
    }
    </script>
     
    </body>
    </html>

    Je vous remercie d'avance

    max

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...je voudrais cliquer sur le nom pour ouvrir la page?...
    A mon avis, c'est dans ta liste qu'il faut mettre les liens, non ?

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul>
      <li><a href="...">Adele</a></li>
      <li><a href="...">Agnes</a></li>
    ...

    Sinon, je ne vois pas...
    Si : remplacer dynamiquement l'action du form ?
    ou faire un window.location.href

    Mais pour ça, il faut que les prénoms et les URL associés soient dans des array JavaScript, utilisables.

    "javascript auto-complete"

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Bonjour jreaux62,

    Lorsque je recherche un nom, je rentre les premières lettres dans mon input il m'affiche la liste commençant par ces premières lettre et lorsque je trouve le nom approprier j'aimerais cliquer dessus pour ouvrir le lien.
    Je voudrais savoir je doit mettre le lien dans le code javascript ou dans les <li> genre <li><a href="#">Adele</a></li>

    Merci

    Max

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans la liste.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Re,

    je viens de m’apercevoir qu'il y a un problème, quand je fait ma liste avec mes lien 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
    14
      <ul  id="myUL">
        <li><a href="Adele.html">Adele</a></li>
        <li><a href="Agnes.html">Agnes</a></li>
        <li><a href="Billy.html">Billy</a></li>
        <li><a href="Bob.html">Bob</a></li>
        <li><a href="Calvin.html">Calvin</a></li>
        <li><a href="Christina.html">Christina</a></li>
        <li><a href="Cindy.html">Cindy</a></li>
       <li><a href="Max.html">Max</a></li>
       <li><a href="Michelle.html">Michelle</a></li>
       <li><a href="Maurice.html">Maurice</a></li>
      <li><a href="Pierre.html">Pierre</a></li>
      <li><a href="louis.html">louis</a></li>
      </ul>

    La recherche ne se fait plus??

    Max

  6. #6
    Invité
    Invité(e)
    Par défaut
    Normal.

    Il faut accéder au contenu du <a>, enfant du <li> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (li[i].childNodes[0].textContent.toUpperCase().indexOf(filter) > -1) {

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Oui normal...
    Sinon voici un exemple :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function myFunction() {
     
                var filter = document.getElementById("myInput").value.toUpperCase();           
                var links =  document.querySelectorAll("#myUL a");
     
                for (var i = 0; i < links.length; i++) {
                    if (links[i].textContent.toUpperCase().indexOf(filter) > -1) {
                        links[i].parentElement.style.display = "";
                    } else {
                        links[i].parentElement.style.display = "none";
                    }
                }
            }
    Cela fonctionne chez moi...

    Citation Envoyé par jreaux62 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (li[i].childNodes[0].textContent.toUpperCase().indexOf(filter) > -1) {
    Oui moi aussi j'utilise textContent à la place de innerHTML par contre j'utiliserais children plutôt que childNodes sinon dans certains cas ça pourrait ne pas fonctionner...

  8. #8
    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
    Billets dans le blog
    125
    Par défaut


    Un autre exemple (seul Adele a un url) :

    Code HTML : 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
    <div class="w3-container">
        <h2>Filtrer une Liste</h2>
        <p>Rechercher un nom dans le champ de saisie.</p>
        <label>
            Un nom :
        </label>
        <input type="text" id="myInput">
     
        <ul id="myUL">
            <li data-url="https://www.google.com">Adele</li>
            <li>Agnes</li>
            <li>Bil</li>
            <li>Bob</li>
            <li>Calvin</li>
            <li>Christine</li>
            <li>Cindy</li>
            <li>Max</li>
            <li>Michelle</li>
            <li>Maurice</li>
            <li>Pierre</li>
            <li>louis</li>
        </ul>
    </div>

    Code JavaScript : 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
    const
        elemInput = document.querySelector('#myInput'),
        elemUL = document.querySelector('#myUL'),
        elemsLI = elemUL.querySelectorAll('li');
     
    for (const elem of elemsLI) {
        elem.addEventListener('click', ev => {
            if (elem.dataset.url) {
                window.location.href = elem.dataset.url;
            }
        }, {
            capture: false,
            passive: true,
            once: false
        });
    }
     
    elemInput.addEventListener('keyup', ev => {
        let
            filter = elemInput.value.toUpperCase();
     
        for (const elem of elemsLI) {
            if (elem.innerHTML.toUpperCase().indexOf(filter) > -1) {
                elem.style.display = "";
            } else {
                elem.style.display = "none";
            }
        }
    }, {
        capture: false,
        passive: true,
        once: false
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Invité
    Invité(e)
    Par défaut
    @danielhagnoul
    OK, mais on perd la sémantique des liens <a>.
    Pas top pour l'accessibilité.

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Bonjour,
    Citation Envoyé par Beginner.
    Oui moi aussi j'utilise textContent à la place de innerHTML par contre j'utiliserais children plutôt que childNodes sinon dans certains cas ça pourrait ne pas fonctionner...
    l'utilisation de textContent directement sur le <li> rendra le même résultat, c'est le propre de textContent (le texte sans les balises pour faire simple).

    En reprenant le code initial la boucle donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      for (i = 0; i < li.length; i++) {
        if (li[i].textContent.toUpperCase().indexOf(filter) > -1) {
          li[i].style.display = "";
        }
        else {
          li[i].style.display = "none";
        }
      }
    }

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Effectivement c'est bien vu.

  12. #12
    Invité
    Invité(e)
    Par défaut
    +1 Idem


    (grrr... il faut qu'on TESTE TOUT !! TOUJOURS !! )

    VITE !! TROUVER une parade ou MIEUX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      for (i = 0; i < li.length; i++) {
        li[i].style.display = (li[i].textContent.toUpperCase().indexOf(filter) > -1)? '' : 'none';
      }
    (OUF : opérateur ternaire... )

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    +1 Idem
    Euh ben j'ai mis un +1 donc avec le tient ça devrait lui faire au moins 2 points mais j'en vois qu'un ? hihihi

  14. #14
    Invité
    Invité(e)
    Par défaut
    C'est fait ! (oubli !)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Oui je m'en doutais...

  16. #16
    Invité
    Invité(e)
    Par défaut
    cela dit...
    ...j'utilise textContent à la place de innerHTML...
    Je le conseille aussi... sur TES conseils (avisés et justes)

    LOL : c'est tout l'intérêt de ce forum : ECHANGER !

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Oui effectivement c'est un des intérêts de ce forum...

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2017
    Messages : 81
    Par défaut
    Salut,

    J'aimerai apporter une précision sur innerHTML et TextContent. Et proposer une alternative avec nodeValue

    innerHTML

    InnerHTML va te permettre de modifier comme son nom l'indique la structure HTML de tes noeuds.

    textContent
    Va permettre de modifier uniquement le contenu du texte de ton noeud.
    L'avantage majeur est un gain de performance. Contrairement à innerHTML, ton HTML ne sera pas "analysé" ce qui fait gagner du temps.
    A noter que tu peux utiliser également innerText.

    nodeValue
    Tu peux également utiliser nodeValue pour te permettre d'avoir beaucoup de flexibilité. Bon son utilisation est moins simple, mais ça en vaut la peine .

    Si tu veux aller plus loin :

    innerHTML
    textContent
    innerText
    nodeValue

Discussions similaires

  1. Afficher une image dont le liens est dans un input
    Par parda3 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2018, 09h59
  2. Lien php dans balise input
    Par dririze dans le forum Langage
    Réponses: 10
    Dernier message: 24/05/2011, 20h27
  3. Afficher image automatiquement a l'insertion lien dans un input
    Par Korben_Debile dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/10/2009, 22h08
  4. lien dans un tableau
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 04/05/2004, 13h51
  5. Verrouiller un lien dans une page
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 5
    Dernier message: 25/02/2003, 16h56

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