Une autre solution courante consiste à ajouter l'option "Autre .." à la liste déroulante et, lorsqu'elle est sélectionnée, afficher la zone de texte qui est cachée. Ensuite, lors de l'envoi du formulaire, attribuez la valeur du champ caché avec la valeur déroulante ou la zone de texte et, dans le code côté serveur, vérifiez la valeur cachée.
Exemple: http://jsfiddle.net/c258Q/
code HTML:
Please select: <form onsubmit="FormSubmit(this);">
<input type="hidden" name="fruit" />
<select name="fruit_ddl" onchange="DropDownChanged(this);">
<option value="apple">Apple</option>
<option value="orange">Apricot </option>
<option value="melon">Peach</option>
<option value="">Other..</option>
</select> <input type="text" name="fruit_txt" style="display: none;" />
<button type="submit">Submit</button>
</form>
JavaScript:
function DropDownChanged(oDDL) {
var oTextbox = oDDL.form.elements["fruit_txt"];
if (oTextbox) {
oTextbox.style.display = (oDDL.value == "") ? "" : "none";
if (oDDL.value == "")
oTextbox.focus();
}
}
function FormSubmit(oForm) {
var oHidden = oForm.elements["fruit"];
var oDDL = oForm.elements["fruit_ddl"];
var oTextbox = oForm.elements["fruit_txt"];
if (oHidden && oDDL && oTextbox)
oHidden.value = (oDDL.value == "") ? oTextbox.value : oDDL.value;
}
Et du côté du serveur, lisez la valeur de "fruit" de la demande.
Je pense que cela peut être ce que je suis à la recherche. Laissez-moi vérifier et revenir à vous. Merci! – Pretzel
Cela semble parfait, mais il n'est pas utilisable pour moi car je l'utilise en interne pour une application privée et cela m'oblige à acheter une licence (que je ne peux probablement pas convaincre mon patron de se lancer.) Licence ici: http : //www.sencha.com/license – Pretzel
Cela ne semble pas permettre d'entrer une valeur "personnalisée". – sholsinger