15

HTML5 表单的 list 属性/datalist 元素显示了一个下拉菜单,其中包含可供选择、编辑甚至输入一些文本的选项。所有这一切都可以通过简洁而强大的代码立即实现:

<input list="states">
<datalist id="states">
    <option value="One">
    <option value="Two">
</datalist>

但是,如何使这样的表单发送与选项文本不同的值,如通常的选择/选项(如下)?

<select>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
4

2 回答 2

5

如果不使用一些 JS+CSS 帮助,您似乎无法使用纯 HTML。

试试这个,我希望它对你有帮助。

html

<input id="datalisttestinput" list="stuff" ></input>
        <datalist id="stuff">
            <option id="3" value="Collin" >
            <option id="5" value="Carl">
            <option id="1" value="Amy" >
            <option id="2" value="Kristal">
        </datalist>

脚本

function GetValue() {
            var x = $('#datalisttestinput').val();
            var z = $('#stuff');
            var val = $(z).find('option[value="' + x + '"]');
            var endval = val.attr('id');
            alert(endval);
        }

最好的祝愿库马尔

于 2013-10-25T07:04:42.003 回答
1

下面是 Kumah 修改后的答案,它使用隐藏字段来包含最终发送到服务器的值。

$('#inputStates').change(function(){
    var c =  $('#inputStates').val();
    $('#inputStates').val(getTextValue());
    $('#statesHidden').val(c);
});

function getTextValue(){
  var val =  $('#inputStates').val();
  var states = $('#states');
  var endVal = $(states).find('option[value="' + val + '"]');
  //depending on your logic, if endVal is empty it means the value wasn't found in the datalist, you can take some action here
  return endVal.text();
}
于 2014-10-13T05:52:49.820 回答