Подтвердить что ты не робот

Может ли HTML5 datalist различать значение и текст опции?

Элемент list/datalist в форматах HTML5 показывает раскрывающееся меню выбора, из которого можно выбрать, отредактировать и даже ввести текст. Все это может быть достигнуто сразу с помощью чистого и мощного кода:

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

Однако как сделать такую ​​форму отправить значение, отличное от текста опции, как в обычном select/option (ниже)?

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

Ответ 1

Кажется, вы не можете с чистым HTML, не используя некоторую помощь JS + CSS.

попробуйте это, я надеюсь, что он вам поможет.

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>

script

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

Лучшие пожелания Кумар

Ответ 2

Ниже приведен измененный ответ 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();
}