如何在 HTML/Javascript 中创建可编辑的组合框?

Posted

技术标签:

【中文标题】如何在 HTML/Javascript 中创建可编辑的组合框?【英文标题】:How can I create an editable combo box in HTML/Javascript? 【发布时间】:2011-03-04 09:17:51 【问题描述】:

我需要让用户从下拉列表中选择一个项目,但也允许他们输入任何文本,即使它与列表中的项目不匹配。如何在带有 htmljavascript 的网页上实现这一点?

select 字段不允许用户输入文本,input 文本字段不显示首选选项。

如果用户打开下拉菜单,所有项目都必须显示,因此它不能是只显示匹配项目的简单自动完成。

【问题讨论】:

可以自己做(提示:用你自己的 HTML 替换 select,它的行为就像一个选择框),但为什么要再次发明***呢? jqueryui.com/demos/autocomplete @Boldewyn:太糟糕了,您没有将其放入答案中。因为这实际上是 OP 要求的相同控制。演示页面实际上在 ComboBox 上显示它,它充当普通选择 + 数据输入。 @RobertKoritnik 啊,是的。但他们最近添加了这个例子,而不是我的回答。早在 10 年,它就是一个全新的小部件。 你会在这个网站上看到一些建议:***.com/questions/2141357/… How can I create an editable dropdownlist in HTML?的可能重复 【参考方案1】:

这是一个脚本: Demo, Source

或者另一个工作方式略有不同的: 链接已删除(网站不再存在)

【讨论】:

谢谢!我将使用第一个脚本。 @ChristianDavén 你在第一个链接中哪里找到源 js 脚本? @shapeare,我不记得了,抱歉!【参考方案2】:

我知道这个问题在很久以前就已经得到解答,但这是针对可能最终来到这里但无法找到所需内容的其他人。我很难找到一个完全符合我需要的现有插件,所以我编写了自己的 jQuery UI 插件来完成这项任务。它基于 jQuery UI 站点上的组合框示例。希望它可以帮助某人。

https://github.com/tmooney3979/jquery.ui.combify

【讨论】:

【参考方案3】:

你可以试试我实现的可编辑组合框http://www.zoonman.com/projects/combobox/

【讨论】:

感谢您这样做!看起来很简单!【参考方案4】:

我也在寻找答案,但我能找到的都是过时的。

此问题自 HTML5 起已解决:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist

<label>Choose a browser from this list:
<input list="browsers" name="myBrowser" /></label>
<datalist id="browsers">
  <option value="Chrome">
  <option value="Firefox">
  <option value="Internet Explorer">
  <option value="Opera">
  <option value="Safari">
  <option value="Microsoft Edge">
</datalist>

如果我没有发现,我会采用这种方法:

http://www.dhtmlgoodies.com/scripts/form_widget_editable_select/form_widget_editable_select.html

【讨论】:

html5数据列表如何满足可编辑的要求? 这种方法会创建一个常规输入字段,您可以在其中输入,但在您输入时也会显示建议(或者,当您在输入字段为空时单击两次,一次聚焦并然后第二次显示整个列表)。至少 Firefox 是这样渲染它的。这是一个示例:jsfiddle.net/6hyrjvvb【参考方案5】:

我认为这将满足您的要求:

https://github.com/RUPOJS/jsCombo

【讨论】:

这是一个仅链接的答案,所以请添加更多信息,因为链接指向的页面可能会消失。 感谢哥们,这实际上是我一直在寻找的。 :)【参考方案6】:

忘记 datalist 元素是自动完成功能的好解决方案,而不是组合框功能。

css:

.combobox 
    display: inline-block;
    position: relative;


.combobox select 
    display: none;
    position: absolute;
    overflow-y: auto;

html:

<div class="combobox">
    <input type="number" name="" value="" min="" max="" step=""/><br/>
    <select size="3">
        <option value="0"> 0</option>
        <option value="25"> 25</option>
        <option value="40"> 40</option>
    </select>
</div>

js (jQuery):

$('.combobox').each(function() 
    var
        $input = $(this).find('input'),
        $select = $(this).find('select');
    function hideSelect() 
        setTimeout(function() 
            if (!$select.is(':focus') && !$input.is(':focus')) 
                $select
                    .hide()
                    .css('z-index', 1);
            
        , 20);
    
    $input
        .focusin(function() 
            if (!$select.is(':visible')) 
                $select
                    .outerWidth($input.outerWidth())
                    .show()
                    .css('z-index', 100);
            
        )
        .focusout(hideSelect)
        .on('input', function() 
            $select.val('');
        );
    $select
        .change(function() 
            $input.val($select.val());
        )
        .focusout(hideSelect);
);

即使您使用文本输入而不是数字,这也能正常工作。

【讨论】:

当我们有多个组合框时,我做了一些修改以获得更好的行为。【参考方案7】:

尝试这样做

<div style="position: absolute;top: 32px; left: 430px;" id="outerFilterDiv">
<input name="filterTextField" type="text" id="filterTextField" tabindex="2"  style="width: 140px;
    position: absolute; top: 1px; left: 1px; z-index: 2;border:none;" />
        <div style="position: absolute;" id="filterDropdownDiv">
<select name="filterDropDown" id="filterDropDown" tabindex="1000"
    onchange="DropDownTextToBox(this,'filterTextField');" style="position: absolute;
    top: 0px; left: 0px; z-index: 1; width: 165px;">
    <option value="-1" selected="selected" disabled="disabled">-- Select Column Name --</option>
</select>

请看下面的例子fiddle

【讨论】:

问题是如何使组合框可编辑,您刚刚将文本框重叠在组合框上。我认为这不是正确的解决方案。 当您不想使用自定义按钮时, 工作得很好。即使用浏览器提供的默认按钮集 @Vishrant 不,他在 dropdown/select 顶部重叠了一个文本框以创建一个 combination box 但这不起作用。添加一些

以上是关于如何在 HTML/Javascript 中创建可编辑的组合框?的主要内容,如果未能解决你的问题,请参考以下文章

如何以可编程方式等待进程启动端点

如何在统一编辑器中从场景创建可编写脚本的对象

JavaScript HTML DOM

Twilio 可编程聊天 - 推送通知未到达

JavaScript学习——HTML DOM

javascript中的DOM