Как с помощью JS в form input datalist показывать содержание тега, а передавать стандартное value?

Как в коде

<form action="URL" method="GET">
    <input list="answers" name="x">
    <datalist id="answers">
      <option value="1">Ответ 1</option>
      <option value="2">Ответ 2</option>
      <option value="3">Ответ 3</option>
    </datalist>
    <input type="submit" value="ПОКАЗАТЬ" />
    </form>

изменить показываемое значение при выборе?

Все работает, но проблема в том, что при выборе значения из списка, в поле вывода показывается value, а не содержание тега. То есть при выборе, скажем, "Ответ 3", показывается 3 и передается 3 (это правильно) Как сделать чтобы показывалось Ответ 3, а передавалось, как и раньше, 3?


Ответы (1 шт):

Автор решения: vantal

document.querySelector('input[list]').addEventListener('input', function(e) {
    var input = e.target,
        list = input.getAttribute('list'),
        options = document.querySelectorAll('#' + list + ' option'),
        hiddenInput = document.getElementById(input.getAttribute('id') + '-hidden'),
        label = input.value;

    hiddenInput.value = label;

    for(var i = 0; i < options.length; i++) {
        var option = options[i];

        if(option.innerText === label) {
            hiddenInput.value = option.getAttribute('data-value');
            break;
        }
    }
});

// Для проверки передачи  - можно удалить
document.getElementById("myForm").addEventListener('submit', function(e) {
    var value = document.getElementById('answer-hidden').value;
    document.getElementById('result').innerHTML = value;
    e.preventDefault();
});
<form id="myForm">
    <input list="answers" id="answer" autocomplete="off">
    <datalist id="answers">
        <option data-value="1">Ответ 1</option>
        <option data-value="2">Ответ2</option>
        <option data-value="3">Ответ 3</option>
        <option data-value="4">Ответ 4</option>
    </datalist>
    <input type="hidden" name="answer" id="answer-hidden">
    <input type="submit">
</form>

<p>Что передает:</p>
<pre id="result"></pre>

→ Ссылка