JSFiddle - React, Tailwind, and code Playground
HTML
<form id="myForm">
<input list="answers" id="answer">
<datalist id="answers">
<option data-value="42">The answer</option>
<option data-value="1337">Elite</option>
<option data-value="69">Dirty</option>
<option data-value="3">Pi</option>
</datalist>
<input type="hidden" name="answer" id="answer-hidden">
<input type="submit">
</form>
<p>Submitted value (for debugging):</p>
<pre id="result"></pre>
JavaScript
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;
}
}
});
// For debugging purposes
document.getElementById("myForm").addEventListener('submit', function(e) {
var value = document.getElementById('answer-hidden').value;
document.getElementById('result').innerHTML = value;
e.preventDefault();
});