我的印象是,除了选择列表中已经存在的任何值之外,您还可以键入一个组合框。但是,我似乎找不到有关如何执行此操作的信息。我需要添加一个属性以允许输入文本吗?
list
。
dropdown
带combo box
。大概<select>
与一起使用<option>
,并从选择空白选项开始。它具有一个值列表,并且“看起来像一个组合框”;它只是缺乏输入文本区域的能力。
我的印象是,除了选择列表中已经存在的任何值之外,您还可以键入一个组合框。但是,我似乎找不到有关如何执行此操作的信息。我需要添加一个属性以允许输入文本吗?
list
。
dropdown
带combo box
。大概<select>
与一起使用<option>
,并从选择空白选项开始。它具有一个值列表,并且“看起来像一个组合框”;它只是缺乏输入文本区域的能力。
Answers:
在之前datalist
(请参阅下面的注释),您将提供其他input
元素供人们输入自己的选项。
<select name="example">
<option value="A">A</option>
<option value="B">B</option>
<option value="-">Other</option>
</select>
<input type="text" name="other">
此机制可在所有浏览器中使用,并且不需要JavaScript。
input
如果选择了“其他”选项,您可以使用一点JavaScript来聪明地仅显示。
该datalist
元素旨在为该概念提供更好的机制。在某些浏览器中,例如iOS Safari <12.2,不支持此功能或实现存在问题。检查“我可以使用”页面以查看当前数据列表支持。
<input type="text" name="example" list="exampleList">
<datalist id="exampleList">
<option value="A">
<option value="B">
</datalist>
datalist
。
在HTML中,您可以向后执行此操作:您可以定义文本输入:
<input type="text" list="browsers" />
并附加一个数据列表。(请注意输入的列表属性)。
<datalist id="browsers">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
该链接可以帮助您: http //www.scriptol.com/html5/combobox.php
您有两个例子。一个在html4中,另一个在html5中
HTML5
<input type="text" list="browsers"/>
<datalist id="browsers">
<option>Google</option>
<option>IE9</option>
</datalist>
HTML4
<input type="text" id="theinput" name="theinput" />
<select name="thelist" onChange="combo(this, 'theinput')">
<option>one</option>
<option>two</option>
<option>three</option>
</select>
function combo(thelist, theinput) {
theinput = document.getElementById(theinput);
var idx = thelist.selectedIndex;
var content = thelist.options[idx].innerHTML;
theinput.value = content;
}
的 dojo
在大多数情况下,示例在应用于现有代码时不起作用。因此,我不得不在这里找到一个替代方法-hxxp://technologymantrablog.com/how-to-create-a-combo-box-with-text-input-jquery-autocomplete/(现在指向垃圾邮件站点或更糟) )
archive.org(不是很有用)
这是jsfiddle- https: //jsfiddle.net/ze7fgby7/
好吧,这是2016年,仍然没有简单的方法来进行组合...确保我们有数据列表,但没有safari / ios支持,它实际上不是可用的。至少我们下面有ES6 ..尝试包装div或span的组合类,方法是将输入框放在select顶部并绑定相关事件,从而将其变成组合。
请参阅以下代码:https : //github.com/kofifus/Combo
(代码依赖于https://github.com/kofifus/New的类模式)
创建组合很容易!只需将div传递给它的构造函数即可:
let mycombo=Combo.New(document.getElementById('myCombo'));
mycombo.options(['first', 'second', 'third']);
mycombo.onchange=function(e, combo) {
let val=combo.value;
// let val=this.value; // same as above
alert(val);
}
<script src="https://rawgit.com/kofifus/New/master/new.min.js"></script>
<script src="https://rawgit.com/kofifus/Combo/master/combo.min.js"></script>
<div id="myCombo" style="width:100px;height:20px;"></div>
这个小得多,不需要jquery,并且在Safari中效果更好。 https://github.com/Fyrd/purejs-datalist-polyfill/
检查修改的问题以添加向下箭头。 https://github.com/Fyrd/purejs-datalist-polyfill/issues
我的解决方案非常简单,看起来完全像一个本机可编辑组合框,但即使在IE6中也可以使用(此处的某些答案需要大量代码或外部库,结果是这样的,例如,文本框中的文本位于下拉菜单的组合框”部分,或者根本看起来像不可编辑的组合框)。
关键是将组合框仅剪切为在文本框上方可见的下拉图标。而且该文本框在组合框的下方有点宽,因此您看不到它的右端-在视觉上继续使用组合框:https : //jsfiddle.net/dLsx0c5y/2/
select#programmoduleselect
{
clip: rect(auto auto auto 331px);
width: 351px;
height: 23px;
z-index: 101;
position: absolute;
}
input#programmodule
{
width: 328px;
height: 17px;
}
<table><tr>
<th>Programm / Modul:</th>
<td>
<select id="programmoduleselect"
onchange="var textbox = document.getElementById('programmodule'); textbox.value = (this.selectedIndex == -1 ? '' : this.options[this.selectedIndex].value); textbox.select(); fireEvent2(textbox, 'change');"
onclick="this.selectedIndex = -1;">
<option value=RFEM>RFEM</option>
<option value=RSTAB>RSTAB</option>
<option value=STAHL>STAHL</option>
<option value=BETON>BETON</option>
<option value=BGDK>BGDK</option>
</select>
<input name="programmodule" id="programmodule" value="" autocomplete="off"
onkeypress="if (event.keyCode == 13) return false;" />
</td>
</tr></table>
(例如,最初在此处使用,但不要发送以下表格:old.dlubal.com/WishedFeatures.aspx)
编辑:macOS的样式需要有所不同:Ch可以,对于FF增加组合框的高度,Safari和Opera会忽略组合框的高度,因此增加其字体大小(有上限,因此请减小文本框的大小)高度):https : //i.stack.imgur.com/efQ9i.png
鉴于仍不完全支持HTML数据列表标记,我使用的另一种方法是Dojo Toolkit ComboBox。与我探索过的其他选项相比,它更易于实现和记录。它也可以与现有框架很好地配合。就我而言,我将此组合框添加到了基于Codeigniter和Bootstrap的现有网站,没有任何问题。您只需要确保将Dojo主题(例如class =“ claro”)应用于组合的父元素而不是body标签即可。避免样式冲突。
首先,包括一个Dojo主题的CSS(例如“ Claro”)。重要的是,下面的JS文件之前要包含CSS文件。
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.9.6/dijit/themes/claro/claro.css" />
接下来,通过CDN包括jQuery和Dojo Toolkit
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.3/dojo/dojo.js"></script>
接下来,您可以按照Dojo的示例代码进行操作,或使用下面的示例来获得一个有效的组合框。
<body>
<!-- Dojo Dijit ComboBox with 'Claro' theme -->
<div class="claro"><input id="item_name_1" class=""/></div>
<script type="text/javascript">
$(document).ready(function () {
//In this example, dataStore is simply an array of JSON-encoded id/name pairs
dataStore = [{"id":"43","name":"Domain Name Renewal"},{"id":"42","name":"Hosting Renewal"}];
require(
[ "dojo/store/Memory", "dijit/form/ComboBox", "dojo/domReady!"],
function (Memory, ComboBox) {
var stateStore = new Memory({
data: dataStore
});
var combo = new ComboBox({
id: "item_name_1",
name: "desc_1",
store: stateStore,
searchAttr: "name"},
"item_name_1"
).startup();
});
});
</script>
</body>
在此网站上查看ComboBox或Combo:http : //www.jeasyui.com/documentation/index.php#
<html>
<head>
<title></title>
<script src="jquery-3.1.0.js"></script>
<script>
$(function () {
$('#selectnumber').change(function(){
alert('.val() = ' + $('#selectnumber').val() + ' AND html() = ' + $('#selectnumber option:selected').html() + ' AND .text() = ' + $('#selectnumber option:selected').text());
})
});
</script>
</head>
<body>
<div>
<select id="selectnumber">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
<option value="4">four</option>
</select>
</div>
</body>
</html>
谢谢...:)
其他答案都没有令人满意,主要是因为UI看起来仍然很差。我发现了这个,这看起来不错,很接近中最美以及可定制的。
可以在此处找到示例和选项等的完整列表,但这是一个基本演示:
$('#editable-select').editableSelect();
<link href="https://cdn.jsdelivr.net/npm/jquery-editable-select@2.2.5/dist/jquery-editable-select.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-editable-select@2.2.5/dist/jquery-editable-select.min.js"></script>
<select id="editable-select">
<option>Alfa Romeo</option>
<option>Audi</option>
<option>BMW</option>
<option>Citroen</option>
</select>
<select>
元素本身不能做到这一点。