在Windows窗体应用程序,一个下拉选择列表还为用户提供了输入一个替代值到同场的选项(假设开发者已经离开了这个选项上的控制功能。)在“选择”/下拉HTML列表中手动输入值?
如何做一在HTML中完成这项工作?它看起来好像只能从列表中选择值。
如果不可能用直线HTML做到这一点,有没有办法用Javascript做到这一点?
在Windows窗体应用程序,一个下拉选择列表还为用户提供了输入一个替代值到同场的选项(假设开发者已经离开了这个选项上的控制功能。)在“选择”/下拉HTML列表中手动输入值?
如何做一在HTML中完成这项工作?它看起来好像只能从列表中选择值。
如果不可能用直线HTML做到这一点,有没有办法用Javascript做到这一点?
ExtJS具有ComboBox控件可以做这件事(和其他有趣的东西!一大堆)
编辑:浏览所有的控件等,在这里:http://www.sencha.com/products/js/
做到这一点,最简单的方法是使用jQuery:jQuery UI combobox/autocomplete
@Pretzel这不需要许可证,在功能上等同于ExtJS产品。 – sholsinger 2010-12-13 15:31:05
这几乎可行。在要求用户选择语言的示例中。所以我输入了“C#”,但只要点击组合框,我的条目就会消失。我需要能够编写自定义答案。不只是选择列表中的人。 – Pretzel 2010-12-13 15:33:36
我认为这可能是最好的选择,但我很难弄清楚如何将它连接到我的HTML。 – Pretzel 2010-12-13 16:40:14
Telerik还有一个组合框控件。从本质上讲,它是一个包含图像的文本框,当您点击它们时,将显示一个包含预定义选项列表的面板。
http://demos.telerik.com/aspnet-ajax/combobox/examples/overview/defaultcs.aspx
但这是AJAX,所以它可能比你想在您的网站(因为你说这是“HTML”)一个更大的足迹。
另一个常见的解决方案是向下拉菜单中添加“Other ..”选项,并在选定的显示文本框中添加其他内容。然后,在提交表单时,使用下拉列表或文本框值分配隐藏字段值,并在服务器端代码中检查隐藏值。
实施例:http://jsfiddle.net/c258Q/
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;
}
而在服务器侧,从所述请求读 “水果” 的值。
我喜欢Shadow Wizard的答案,它可以很好地回答这个问题。 我对这个我使用jQuery扭曲在这里。 http://jsfiddle.net/UJAe4/
输入新值后,表单准备发送,只需要处理后端的新值。
jQuery是:
(function ($)
{
$.fn.otherize = function (option_text, texts_placeholder_text) {
oSel = $(this);
option_id = oSel.attr('id') + '_other';
textbox_id = option_id + "_tb";
this.append("<option value='' id='" + option_id + "' class='otherize' >" + option_text + "</option>");
this.after("<input type='text' id='" + textbox_id + "' style='display: none; border-bottom: 1px solid black' placeholder='" + texts_placeholder_text + "'/>");
this.change(
function() {
oTbox = oSel.parent().children('#' + textbox_id);
oSel.children(':selected').hasClass('otherize') ? oTbox.show() : oTbox.hide();
});
$("#" + textbox_id).change(
function() {
$("#" + option_id).val($("#" + textbox_id).val());
});
};
}(jQuery));
因此,在应用这下面的HTML:
<form>
<select id="otherize_me">
<option value=1>option 1</option>
<option value=2>option 2</option>
<option value=3>option 3</option>
</select>
</form>
就像这样:
$(function() {
$("#otherize_me").otherize("other..", "put new option vallue here");
});
任何寻找一个简单的jQuery的解决方案,而无需在jQuery UI自动完成网站上实现所有这些疯狂的行为,请看这里:
http://www.benknowscode.com/2013/03/finishing-jquery-ui-autocomplete_4743.html
这个人基本上创建在jQuery的用户界面示例中使用的组合框设置的延伸部。他还扩大了一点。
$('.your-select-element').combobox();
我面临同样的基本问题:想这是从根本上的HTML规范不同的东西一个文本框的功能和选择框结合
只是调用它。
的好消息是,selectize.js正是这样做的:
Selectize是一个文本框,框的混合体。它基于jQuery,对标记,联系人列表,国家选择器等非常有用。
几乎所有的解决方案,喜欢这个最好的 – Daniel 2015-06-26 17:36:19
它现在可以用HTML5
做在这里看到这个帖子HTML select form with option to enter custom value
<input type="text" list="cars" />
<datalist id="cars">
<option>Volvo</option>
<option>Saab</option>
<option>Mercedes</option>
<option>Audi</option>
</datalist>
它对我很好。在很多情况下,我们不需要支持旧版浏览器。我只在输入栏的背景上添加了“向下箭头”图像(您需要一个实际的图像文件)。 – 2016-11-01 20:35:22
看起来Chrome本身就是向下箭头的东西。 – Tod 2017-04-03 12:13:02
我想,这可能就是我要找的。让我看看并找回你。谢谢! – Pretzel 2010-12-13 15:16:55
这看起来很完美,但它不适用于我,因为我在内部为私人应用程序使用它,它需要我购买许可证(我可能无法说服我的老板跳槽)。 ://www.sencha.com/license – Pretzel 2010-12-13 15:29:56
这似乎不允许输入“自定义”值。 – sholsinger 2010-12-13 15:30:18