Menu déroulant / zone de texte en un seul
je travaille sur 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 de cette liste déroulante pour accepter le texte. Ainsi, si le client veut choisir dans la liste déroulante, puis il peut, aussi, si le client veux entrez le montant du texte, puis il peut aussi. Comme vous pouvez le voir je veux faire en double.
par exemple: supposons qu'il y ait un menu déroulant amount
, et ses éléments sont (1,2,3);
supposons maintenant que le client a besoin que le montant soit 5 - c'est son droit - il n'existe pas dans la liste déroulante, donc le client doit maintenant entrer le montant textuellement. Donc, pour toute inscription, le client doit choisir dans la liste déroulante ou entrez le montant textuellement.
après la description de mon problème, et le simple exemple que je vous ai présenté, voici ma question:
y a-t-il du code HTML pour faire un menu déroulant et un champ de texte dans l'une, deux, pas séparés?
6 réponses
Option 1
Inclure le script de dhtmlgoodies et de les initialiser comme ceci:
<input type="text" name="myText" value="Norway"
selectBoxOptions="Canada;Denmark;Finland;Germany;Mexico">
createEditableSelect(document.forms[0].myText);
Option 2
Voici une solution sur mesure qui combine un élément <select>
et un élément <input>
, les styles, et bascule d'avant en arrière via JavaScript
<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;line-height:20px;margin:0;padding:0;"
onchange="document.getElementById('displayValue').value=this.options[this.selectedIndex].text; document.getElementById('idValue').value=this.options[this.selectedIndex].value;">
<option></option>
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
</select>
<input type="text" name="displayValue" id="displayValue"
placeholder="add/select a value" onfocus="this.select()"
style="position:absolute;top:0px;left:0px;width:183px;width:180px;#width:180px;height:23px; height:21px;#height:18px;border:1px solid #556;" >
<input name="idValue" id="idValue" type="hidden">
</div>
vous pouvez le faire nativement avec HTML5 <datalist>
:
<label>Choose a browser from this list:
<input list="browsers" name="myBrowser" /></label>
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Internet Explorer">
<option value="Opera">
<option value="Safari">
<option value="Microsoft Edge">
</datalist>
j'ai trouvé cette question et cette discussion très utiles et je voulais montrer la solution que j'ai trouvée. Il est basé sur la réponse donnée par @DevangRathod, mais j'ai utilisé jQuery et fait quelques modifications à elle, donc je voulais montrer un échantillon entièrement commenté pour aider quelqu'un d'autre travaillant sur quelque chose de similaire. À l'origine, j'utilisais l'élément de liste de données HTML5, mais j'étais insatisfait de cette solution puisqu'elle supprime les options de la liste déroulante qui ne correspondent pas au texte tapé dans la boîte. Dans ma candidature, je voulais que la liste complète soit toujours disponible.
démo entièrement fonctionnelle ici: https://jsfiddle.net/abru77mm /
HTML:
<!--
Most style elements I left to the CSS file, but some are here.
Reason being that I am actually calculating my width dynamically
in my application so when I dynamically formulate this HTML, I
want the width and all the factors (such as padding and border
width and margin) that go into determining the proper widths to
be controlled by one piece of code, so those pieces are done in
the in-line style. Otherwise I leave the styling to the CSS file.
-->
<div class="data-list-input" style="width:190px;">
<select class="data-list-input" style="width:190px;">
<option value=""><Free Form Text></option>
<option value="Male">Male</option>
<option value="Female">Female</option>
<!-- Note that though the select/option allows for a different
display and internal value, there is no such distinction in the
text box, so for all the options (except the "none" option) the
value and content of the option should be identical. -->
</select>
<input class="data-list-input" style="width:160px;padding:4px 6px;border-width:1px;margin:0;" type="text" name="sex" required="required" value="">
</div>
JS:
jQuery(function() {
//keep the focus on the input box so that the highlighting
//I'm using doesn't give away the hidden select box to the user
$('select.data-list-input').focus(function() {
$(this).siblings('input.data-list-input').focus();
});
//when selecting from the select box, put the value in the input box
$('select.data-list-input').change(function() {
$(this).siblings('input.data-list-input').val($(this).val());
});
//When editing the input box, reset the select box setting to "free
//form input". This is important to do so that you can reselect the
//option you had selected if you want to.
$('input.data-list-input').change(function() {
$(this).siblings('select.data-list-input').val('');
});
});
CSS:
div.data-list-input
{
position: relative;
height: 20px;
display: inline-flex;
padding: 5px 0 5px 0;
}
select.data-list-input
{
position: absolute;
top: 5px;
left: 0px;
height: 20px;
}
input.data-list-input
{
position: absolute;
top: 0px;
left: 0px;
height: 20px;
}
tous les commentaires pour l'amélioration sur ma mise en œuvre sont les bienvenus. J'espère que quelqu'un trouve cela utile.
j'aime l'entrée jQuery Token. En fait, il préfère L'assurance-chômage à certaines des autres options mentionnées ci-dessus.
http://loopj.com/jquery-tokeninput /
voir Aussi: http://railscasts.com/episodes/258-token-fields une explication
inspiré par le violon js de @ajdeguzman( a fait ma journée), voici ma dérivée 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>
ressemble à ceci:
j'aimerais ajouter une solution jQuery autocomplete qui fait le travail.
Étape 1: Faites la liste hauteur fixe et contrôlable
récupérez le code de https://jqueryui.com/autocomplete / exemple" Scrollable", paramétrant la hauteur maximale à la liste des résultats de façon à ce qu'elle se comporte comme une boîte de sélection.
Étape 2: Ouvrez la liste de focus:
Affichage jquery ui l'auto-complétion liste de l'événement
Étape 3: Définissez les caractères minimums à 0 pour qu'il s'ouvre peu importe le nombre de caractères dans 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="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/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érifier jsfiddle ici: