109 votes

Menu déroulant/champ de texte en un

Je travaille à la construction d'un nouveau site, et j'ai besoin d'un menu déroulant pour sélectionner la quantité de quelque chose dans mon site. Mais en même temps, j'ai besoin que cette liste déroulante accepte du texte. Ainsi, si le client veut choisir dans la liste déroulante, il peut le faire, et si le client veut entrer le montant par le texte, il le peut aussi. Comme vous pouvez le voir, je veux que cela soit double.

Par exemple, supposons qu'il existe un amount et ses éléments sont (1,2,3) ;

Supposons maintenant que le client souhaite que le montant soit de 5 - c'est son droit - il n'existe pas dans la liste déroulante, le client doit donc maintenant saisir le montant textuellement. Ainsi, pour toute entrée, le client doit soit choisir dans la liste déroulante, soit saisir le montant textuellement.

Après la description de mon problème, et l'exemple simple que je vous ai présenté, voici ma question :

Existe-t-il un code HTML pour faire un menu déroulant et un champ de texte en un seul, en double, non séparé ?

2voto

J'aimerais ajouter une solution basée sur l'autocomplétion jQuery qui fait le travail.

Étape 1 : Rendre la liste à hauteur fixe et déroulante

Obtenez le code à partir de https://jqueryui.com/autocomplete/ Exemple de "Scrollable", en fixant une hauteur maximale à la liste de résultats pour qu'elle se comporte comme une boîte de sélection.

Étape 2 : Ouvrez la liste sur le focus :

Affichage de la liste auto-complète de l'interface utilisateur jquery sur l'événement focus

Etape 3 : Définir le nombre minimum de caractères à 0 pour que l'application s'ouvre quel que soit le nombre de caractères de l'entrée.

Résultat final :

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Autocomplete - Scrollable results</title>
  <link rel="stylesheet" href="http://stackoverflow.com//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="http://stackoverflow.com/resources/demos/style.css">
  <style>
  .ui-autocomplete {
    max-height: 100px;
    overflow-y: auto;
    /* prevent horizontal scrollbar */
    overflow-x: hidden;
  }
  /* IE 6 doesn't support max-height
   * we use height instead, but this forces the menu to always be this tall
   */
  * html .ui-autocomplete {
    height: 100px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",
      "Groovy",
      "Haskell",
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",
      "Scala",
      "Scheme"
    ];
    $( "#tags" ).autocomplete({
//      source: availableTags, // uncomment this and comment the following to have normal autocomplete behavior
      source: function (request, response) {
          response( availableTags);
      },
      minLength: 0
    }).focus(function(){
//        $(this).data("uiAutocomplete").search($(this).val()); // uncomment this and comment the following to have autocomplete behavior when opening
        $(this).data("uiAutocomplete").search('');
    });
  } );
  </script>
</head>
<body>

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

</body>
</html>

Vérifiez jsfiddle ici :

https://jsfiddle.net/bao7fhm3/1/

1voto

Matthias Points 764

J'aime l'entrée Token de jQuery. En fait, je préfère l'interface utilisateur à certaines des autres options mentionnées ci-dessus.

http://loopj.com/jquery-tokeninput/

Voir aussi : http://railscasts.com/episodes/258-token-fields pour une explication

1voto

Inspiré par le js fiddle de @ajdeguzman (qui a fait ma journée), voici mon dérivé de node/React :

 <div style={{position:"relative",width:"200px",height:"25px",border:0,
              padding:0,margin:0}}>
    <select style={{position:"absolute",top:"0px",left:"0px",
                    width:"200px",height:"25px",lineHeight:"20px",
                    margin:0,padding:0}} onChange={this.onMenuSelect}>
            <option></option>
            <option value="starttime">Filter by Start Time</option>
            <option value="user"     >Filter by User</option>
            <option value="buildid"  >Filter by Build Id</option>
            <option value="invoker"  >Filter by Invoker</option>
    </select>
    <input name="displayValue" id="displayValue" 
           style={{position:"absolute",top:"2px",left:"3px",width:"180px",
                   height:"21px",border:"1px solid #A9A9A9"}}
           onfocus={this.select} type="text" onChange={this.onIdFilterChange}
           onMouseDown={this.onMouseDown} onMouseUp={this.onMouseUp} 
           placeholder="Filter by Build ID"/>
 </div>

Ça ressemble à ça :

enter image description here

0voto

Durai DD Points 31

Vous pouvez utiliser TextField en tant que sélection de liste déroulante ... essayez ce code

var data = ['apple','orange','banana','pineapple'] 

             <TextField                     
                  select
                  size="small"
                  fullWidth                  
                  SelectProps={{ MenuProps: { sx: { maxHeight: 247 } } }}                
                >
                  {data.map((text) => (
                    <MenuItem value={text}>{text}</MenuItem>
                  ))}
                </TextField>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X