可编辑的"选择"元素

fra*_*ara 49 html html-select

我想在表单中有一个select元素,但除了下拉列表中的选项之外,能够编辑它并添加新选项而不是其他输入文本会很有用,我需要一次性完成.可能吗?

小智 100

没有什么是不可能的.这是一个解决方案,只要<select>更改值,就可以简单地设置文本输入的值:JSFiddle
Rendering上的演示已在Firefox和Google Chrome上测试过.

<style>
  .select-editable { position:relative; background-color:white; border:solid grey 1px;  width:120px; height:18px; }
  .select-editable select { position:absolute; top:0px; left:0px; font-size:14px; border:none; width:120px; margin:0; }
  .select-editable input { position:absolute; top:0px; left:0px; width:100px; padding:1px; font-size:12px; border:none; }
  .select-editable select:focus, .select-editable input:focus { outline:none; }
</style>

<div class="select-editable">
  <select onchange="this.nextElementSibling.value=this.value">
    <option value=""></option>
    <option value="115x175 mm">115x175 mm</option>
    <option value="120x160 mm">120x160 mm</option>
    <option value="120x287 mm">120x287 mm</option>
  </select>
  <input type="text" name="format" value=""/>
</div>
Run Code Online (Sandbox Code Playgroud)

您也可以使用input list属性和<datalist>元素在HTML5中执行此操作:

<input list="browsers" name="browser">
<datalist id="browsers">
  <option value="Internet Explorer">
  <option value="Firefox">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>
Run Code Online (Sandbox Code Playgroud)

  • 你在实现中有一个错误:如果从列表中选择115x175毫米,然后手动插入一些文本 - 12222 - 然后尝试再次选择115x175毫米 - 什么都不会发生 - 这是因为列表不是虽然输入已更改但已更改. (4认同)
  • 您可以通过在输入元素中添加onchange ="this.previousElementSibling.selectedIndex = -1"来解决上面提到的错误. (4认同)
  • input 是一个 void 元素,因此不应该(取决于 doctype)有结束标记(因为它不能有内容)http://www.w3.org/html/wg/drafts/html/master/syntax.html #void-元素 (3认同)
  • &lt;datalist&gt; 有问题。如果您有一个很长的列表,它会溢出浏览器并捕获屏幕上从上到下的区域。缩小宽度和高度的样式不起作用。在 chrome 52.x 上测试了此行为。Firefox 上也有问题。综上所述,&lt;datalist&gt;还不稳定。因此,仅当选项数量较少且有限时才使用 datalist。不要将其用于长列表或动态列表。 (2认同)

cam*_*ter 10

与上面的答案类似但没有绝对定位:

<select style="width: 200px; float: left;" onchange="this.nextElementSibling.value=this.value">
    <option></option>
    <option>1</option>
    <option>2</option>
    <option>3</option> 
</select>
<input style="width: 185px; margin-left: -199px; margin-top: 1px; border: none; float: left;"/>
Run Code Online (Sandbox Code Playgroud)

因此,创建一个输入框并将其放在组合框的顶部


Tom*_*Tom 7

A bit more universal <select name="env" style="width: 200px; position:absolute;" onchange="this.nextElementSibling.value=this.value">
    <option></option>
    <option>1</option>
    <option>2</option>
    <option>3</option> 
</select>
<input style="width: 178px; margin-top: 1px; border: none; position:relative; left:1px; margin-right: 25px;" value="123456789012345678901234"/>layout ...
Run Code Online (Sandbox Code Playgroud)