Comment créer une dropdownlist modifiable en HTML?

j'aimerais créer un champ texte avec une liste déroulante qui permet à l'utilisateur de choisir des valeurs prédéfinies. L'utilisateur doit également pouvoir taper une nouvelle valeur ou en sélectionner une prédéfinie à partir d'une liste déroulante. Je sais que je peux utiliser deux widgets pour cela, mais dans mon application il serait plus ergonomique si elle était unifiée dans un seul widget.

est-ce qu'il y a un widget standard ou dois-je utiliser un javascript tiers?

et la portabilité du navigateur?

40
demandé sur yoozer8 2008-11-05 11:57:09

9 réponses

la meilleure façon de le faire est probablement d'utiliser une bibliothèque tierce.

il y a une implémentation de ce que vous recherchez dans jQuery UI et dans dojo . jQuery est plus populaire, mais dojo vous permet de définir déclarativement les widgets en HTML, ce qui ressemble plus à ce que vous recherchez.

que vous utilisez dépendra de votre style, mais les deux sont développés pour le travail de cross browser, et les deux seront mis à jour plus souvent que le code de copier-coller.

15
répondu Dan Monego 2010-08-19 13:19:26

vous pouvez accomplir ceci en utilisant la balise <datalist> dans HTML5.

<input type="text" name="product" list="productName"/>
<datalist id="productName">
    <option value="Pen">Pen</option>
    <option value="Pencil">Pencil</option>
    <option value="Paper">Paper</option>
</datalist>

Si vous double-cliquez sur l'entrée de texte dans le navigateur une liste d'options apparaît.

86
répondu Alexandru Boerescu 2013-07-15 16:03:24

cela peut être réalisé à l'aide de HTML, CSS et JQuery. J'ai créé un exemple de page:

$(document).ready(function(){
   
    $(".editableBox").change(function(){         
        $(".timeTextBox").val($(".editableBox option:selected").html());
    });
});
.editableBox {
    width: 75px;
    height: 30px;
}

.timeTextBox {
    width: 54px;
    margin-left: -78px;
    height: 25px;
    border: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
    <select class="editableBox">        
        <option value="1">01:00</option>
        <option value="2">02:00</option>
        <option value="3">03:00</option>
        <option value="4">04:00</option>
        <option value="5">05:00</option>
        <option value="6">06:00</option>
        <option value="7">07:00</option>
        <option value="8">08:00</option>
        <option value="9">09:00</option>
        <option value="10">10:00</option>
        <option value="11">11:00</option>
        <option value="12">12:00</option>
        <option value="13">13:00</option>
        <option value="14">14:00</option>
        <option value="15">15:00</option>
        <option value="16">16:00</option>
        <option value="17">17:00</option>
        <option value="18">18:00</option>
        <option value="19">19:00</option>
        <option value="20">20:00</option>
        <option value="21">21:00</option>
        <option value="22">22:00</option>
        <option value="23">23:00</option>
        <option value="24">24:00</option>
    </select>
    <input class="timeTextBox" name="timebox" maxlength="5"/>
</div>
18
répondu Natraj 2015-07-30 21:24:38

la balise <select> ne permet l'utilisation que d'entrées prédéfinies. La solution typique à votre problème est d'avoir une entrée étiquetée 'autre' et un champ d'édition désactivé ( <input type="text" ). Ajouter du JavaScript pour activer le champ edit uniquement lorsque' Other ' est sélectionné.

il peut être possible de créer un dropdown qui permet l'édition directe, mais IMO qui n'est pas la peine de l'effort. Si C'était le cas, Amazon, Google ou Microsoft le feraient; -) il suffit de faire le travail avec la solution la moins compliquée. Comme plus rapide (votre patron peut comme ça) et généralement plus facile à maintenir (vous pouvez comme ça).

8
répondu Treb 2008-11-05 09:05:15

mise en œuvre très simple (fonctionnalité de base seulement) basée sur CSS et une ligne de code JS

<div class="dropdown">
    <input type="text" />
    <select  onchange="this.previousElementSibling.value=this.value; this.previousElementSibling.focus()">
        <option>This is option 1</option>
        <option>Option 2</option>
    </select>
</div>

s'il vous Plaît note: il utilise previousElementSibling qui n'est pas pris en charge dans les navigateurs plus anciens (ci-dessous IE9)

.dropdown {
    position: relative;
    width: 200px;
}
.dropdown select
{
    width: 100%;
}
.dropdown > * {
    box-sizing: border-box;
    height: 1.5em;
}
.dropdown select {
}
.dropdown input {
    position: absolute;
    width: calc(100% - 20px);
}

JSFiddle

6
répondu Max 2015-07-18 03:11:34

ComboBox avec la zone de texte (Pour la Pré-défini les Valeurs ainsi que les Valeurs définies par l'Utilisateur.)

ComboBox avec TextBox (Cliquez ici)

2
répondu Lakshmana Kumar D 2014-12-18 12:31:39

Je ne suis pas sûr qu'il y ait un moyen de le faire automatiquement sans javascript.

ce dont vous avez besoin est quelque chose qui fonctionne du côté du navigateur pour soumettre votre formulaire de retour au serveur quand ils l'utilisateur fait une sélection - donc, javascript.

de plus, assurez-vous d'avoir un autre moyen (c.-à-d. un bouton Soumettre) pour ceux qui ont désactivé javascript.

Un bon exemple: Combo-Box "Visualiseur de 151980920"

j'ai même eu un combo-box plus sophistiqué hier, avec ce dhtmlxCombo , en utilisant ajax pour récupérer des valeurs pertinentes parmi une grande quantité de données.

1
répondu VonC 2017-05-23 11:47:13

un combobox est malheureusement quelque chose qui a été omis des spécifications HTML.

La seule façon de le gérer, malheureusement, est de faire rouler votre propre ou utiliser un pré-construit. celui-ci semble assez simple. J'utilise celui-ci pour une application open-source bien que malheureusement vous devez payer pour l'usage commercial.

1
répondu 2008-11-05 09:05:40

un peu CSS et vous êtes fait violon

<div style="position: absolute;top: 32px; left: 430px;" id="outerFilterDiv">
<input name="filterTextField" type="text" id="filterTextField" tabindex="2"  style="width: 140px;
    position: absolute; top: 1px; left: 1px; z-index: 2;border:none;" />
        <div style="position: absolute;" id="filterDropdownDiv">
<select name="filterDropDown" id="filterDropDown" tabindex="1000"
    onchange="DropDownTextToBox(this,'filterTextField');" style="position: absolute;
    top: 0px; left: 0px; z-index: 1; width: 165px;">
    <option value="-1" selected="selected" disabled="disabled">-- Select Column Name --</option>
</select>

1
répondu atom217 2013-10-08 04:46:07