我想创建一个带有下拉列表的文本字段,该列表允许用户选择一些预定义的值.用户还应该能够键入新值或从下拉列表中选择预定义值.我知道我可以使用两个小部件但是在我的应用程序中,如果它在一个小部件中统一,那将更符合人体工程学.
是否有标准小部件或我必须使用第三方JavaScript?
浏览器的可移植性怎么样?
您可以使用HTML5中的标记来完成此操作.
如果双击浏览器中的输入文本,将显示带有已定义选项的列表.
这可以通过纯HTML,CSS和JQuery来实现.我创建了一个示例页面:
$(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;
}
最好的方法是使用第三方库.
在jQuery UI和dojo中有一个你正在寻找的实现.jQuery更受欢迎,但是dojo允许您以声明方式定义HTML中的小部件,这听起来更像您正在寻找的内容.
您使用哪一个取决于您的风格,但两者都是为跨浏览器工作而开发的,并且两者都会比复制和粘贴代码更频繁地更新.
该标签只允许使用预定义项.问题的典型解决方案是将一个条目标记为"其他"和一个禁用的编辑字段(
).添加一些JavaScript以仅在选择"其他"时启用编辑字段.
有可能以某种方式创建一个允许直接编辑的下拉列表,但IMO不值得付出努力.如果是这样,亚马逊,谷歌或微软都会这样做;-)只需用最简单的解决方案完成工作.它更快(你的老板可能会喜欢)并且通常更容易维护(你可能会喜欢).
基于CSS和一行JS代码的非常简单的实现(仅基本功能)
请注意:它使用旧版浏览器不支持的previousElementSibling (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