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
$('input[list]').on('input', function(e) {
var $input = $(e.target),
$options = $('#' + $input.attr('list') + ' option'),
$hiddenInput = $('#' + $input.attr('id') + '-hidden'),
label = $input.val();
$hiddenInput.val(label);
for(var i = 0; i < $options.length; i++) {
var $option = $options.eq(i);
if($option.text() === label) {
$hiddenInput.val( $option.attr('data-value') );
break;
}
}
});
// For debugging purposes
$("#myForm").on('submit', function(e) {
$('#result').html( $('#answer-hidden').val() );
e.preventDefault();
});