2010-12-13 92 views
19

在Windows窗体应用程序,一个下拉选择列表还为用户提供了输入一个替代值到同场的选项(假设开发者已经离开了这个选项上的控制功能。)在“选择”/下拉HTML列表中手动输入值?

如何做一在HTML中完成这项工作?它看起来好像只能从列表中选择值。

如果不可能用直线HTML做到这一点,有没有办法用Javascript做到这一点?

回答

2

ExtJS具有ComboBox控件可以做这件事(和其他有趣的东西!一大堆)

编辑:浏览所有的控件等,在这里:http://www.sencha.com/products/js/

+0

我想,这可能就是我要找的。让我看看并找回你。谢谢! – Pretzel 2010-12-13 15:16:55

+0

这看起来很完美,但它不适用于我,因为我在内部为私人应用程序使用它,它需要我购买许可证(我可能无法说服我的老板跳槽)。 ://www.sencha.com/license – Pretzel 2010-12-13 15:29:56

+0

这似乎不允许输入“自定义”值。 – sholsinger 2010-12-13 15:30:18

6

做到这一点,最简单的方法是使用jQuery:jQuery UI combobox/autocomplete

+0

@Pretzel这不需要许可证,在功能上等同于ExtJS产品。 – sholsinger 2010-12-13 15:31:05

+5

这几乎可行。在要求用户选择语言的示例中。所以我输入了“C#”,但只要点击组合框,我的条目就会消失。我需要能够编写自定义答案。不只是选择列表中的人。 – Pretzel 2010-12-13 15:33:36

+0

我认为这可能是最好的选择,但我很难弄清楚如何将它连接到我的HTML。 – Pretzel 2010-12-13 16:40:14

2

另一个常见的解决方案是向下拉菜单中添加“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; 
} 

而在服务器侧,从所述请求读 “水果” 的值。

0

我喜欢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"); 

}); 
7

我面临同样的基本问题:想这是从根本上的HTML规范不同的东西一个文本框的功能和选择框结合

只是调用它。

的好消息是,selectize.js正是这样做的:

Selectize是一个文本框,框的混合体。它基于jQuery,对标记,联系人列表,国家选择器等非常有用。

+0

几乎所有的解决方案,喜欢这个最好的 – Daniel 2015-06-26 17:36:19

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> 
+0

它对我很好。在很多情况下,我们不需要支持旧版浏览器。我只在输入栏的背景上添加了“向下箭头”图像(您需要一个实际的图像文件)。 2016-11-01 20:35:22

+1

看起来Chrome本身就是向下箭头的东西。 – Tod 2017-04-03 12:13:02