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 :

Mettre un espace dans une liste d'options


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Mettre un espace dans une liste d'options
    Bonjour,
    J'ai un script codé en utf-8.
    Dans une liste de choix de séparateurs, je voudrais créer une option ' - ' (notez l'espace de chaque côté du trait d'union).
    J'ai essayé ceci:
    ' - '
    '\u20-\u20'
    '\u0020-\u0020'
    '\u0020 - \u0020'
    Certaines de ces écritures plantent le script, les autres affichent '-' sans les espaces.

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 388
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Une liste de choix de séparateurs... avec les balises <select> et <option>? J'ai testé avec FireFox. Le code ci-dessous ajoute un espace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option>&nbsp;-</option>
    Et le code ci-dessous en ajoute trois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option>&nbsp;&nbsp;&nbsp;-</option>

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Oui, merci mais ça ne fonctionne pas si j'écrit cette chaîne en variable JS comme ceci:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    var [' ', '-', '&nbsp; - &nbsp;', '.', '+', ', ']

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum. On peut voir un exemple qui ne plante pas le script ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Fonction de création d'options:
    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
    // Création d'une liste d'options pour balises select
    function makeOptions(optionValues, optionTextes) {
    	optionTextes = typeof optionTextes === 'undefined' ? optionValues: optionTextes;
    	var options = [];
    	var text, i;
    	var max = optionValues.length;
     
    	for (i=0; i<max; i++) {
    		if (optionValues[i] == 'optgroup') {
    			// A mettre au point
    			//options[i] = document.createElement('optgroup');
    			//options[i].label = optionValues[i+1];
    			// Lien parent non défini
    			//options[i].parentNode.insertBefore(options[i], options[i+1]);
    		}
    		else {
    			text = document.createTextNode(optionTextes[i]);
    			options[i] = document.createElement('option');
    			options[i].value = optionValues[i];
    			options[i].appendChild(text);
    		}
    	}
    	return options;
    }
    Code appelant:
    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
    	// Ajout d'un séparateur de champ (si fieldNb >0)
    	if (fieldNb > 0) {
    		insSep[lineNb][fieldNb] = document.createElement('select');
    		insSep[lineNb][fieldNb].id = 'insSep['+lineNb+']['+fieldNb+']';
    		insSep[lineNb][fieldNb].setAttribute('name', 'insSep['+lineNb+']['+fieldNb+']');
    		insSep[lineNb][fieldNb].style.minWidth = 'initial';
    		insSep[lineNb][fieldNb].style.maxWidth = '2em';
    		arrSep = makeOptions([' ', '-', '\u0020-\u0020', '.', '+', ', ']);
    		xMax = arrSep.length;
    		for (let i=0; i<xMax; i++) {
    			insSep[lineNb][fieldNb].appendChild(arrSep[i]);
    		}
    		insSep[lineNb][fieldNb].selectedIndex = 0;
    		cell.appendChild(insSep[lineNb][fieldNb]);
    	}

  6. #6
    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 : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Pour moi, mon code de test ci-dessous, cela fonctionne :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="author" content="Daniel Hagnoul">
      <title>Test</title>
      <style>
     
      </style>
      <script>
        'use strict';
        
        // Création d'une liste d'options pour balises select
        function makeOptions( optionValues, optionTextes = optionValues ){      
          let
            options = [],
            max = optionValues.length;
            
          for ( let i = 0; i < max; i++ ){
            options[ i ] = document.createElement( 'option' );
            options[ i ].value = optionValues[ i ];
            options[ i ].appendChild( document.createTextNode( optionTextes[ i ] ) );
          }
          
          return options;
        }    
        
        document.addEventListener( 'DOMContentLoaded', ev => {
          
        }, false );
        
        window.addEventListener( 'load', ev => {
          const
            mySelect = document.querySelector( "#mySelect" );
          
          let
            arrSep = makeOptions( [ "testr1", ' ', '-', '\u0020-\u0020', '.', '+', ', ', "test2" ] );
                  
          for ( let opt of arrSep ){
            mySelect.appendChild( opt );
          }
          
          mySelect.addEventListener( "change", ev => {
            console.log( mySelect.value );
          }, false );
          
        }, false );
      </script>
    </head>
    <body>
      <main>
     
        <select id="mySelect"></select>
     
      </main>
    </body>
    </html>

    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.)

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Eh non, ton code donne le même résultat que le mien, bien qu'il soit beaucoup plus élégant.
    En fait, les espaces de chaque côté du tiret n'apparaissent pas dans le texte de l'option. Mais j'ai trouvé, il suffit de remplacer l'espace par un espace insécable en le codant '\u00A0' et non pas '&nbsp;' comme je l'avais fait initialement mais je ne comprends pas vraiment pourquoi.

    Mon problème de départ est résolu mais avant de le marquer comme tel, j'ai quelques remarques:

    L'écriture:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    function makeOptions( optionValues, optionTextes = optionValues )
    n'est pas accepté par IE.
    Il faut la remplacer par
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    function makeOptions( optionValues, optionTextes )
    et tester si la variable est définie.

    Quand faut-il utiliser document.querySelector ou document.getElementById?

  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 : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    L'écriture:function makeOptions( optionValues, optionTextes = optionValues ) n'est pas accepté par IE.
    Je travaille uniquement avec les navigateurs compatibles à plus de 90 % avec le JS d'aujourd'hui (ES2015).

    Voir : ECMAScript compatibility table.

    j'utilise Chrome, Firefox et Edge.

    Si vous devez être compatible avec les navigateurs IE8+, il faut convertir le code ES2015 en ES5 avec Babel.

    Quand faut-il utiliser document.querySelector ou querySelectorAll() ?
    Toujours, car ils utilisent les mêmes sélecteurs que jQuery et le CSS.

    querySelector() est disponible depuis IE8.
    querySelectorAll() est disponible depuis IE9.

    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
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci pour tout!

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

Discussions similaires

  1. [Requete] Mettre le résultat dans une liste modifiable
    Par Rizel dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/05/2007, 13h40
  2. mettre la valeur dans une liste
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 27/02/2007, 11h42
  3. Mettre des images dans une liste déroulante
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 01/12/2006, 15h35
  4. Mettre des espaces dans une string à intervalles réguliers.
    Par benitoelputoamo dans le forum Général Python
    Réponses: 3
    Dernier message: 15/11/2006, 16h14
  5. [CSS] Problème d'espaces dans une liste
    Par sylsau dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 03/08/2006, 13h46

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