Show datalist labels but submit the actual value
Note that datalist
is not the same as a select
. It allows users to enter a custom value that is not in the list, and it would be impossible to fetch an alternate value for such input without defining it first.
Possible ways to handle user input are to submit the entered value as is, submit a blank value, or prevent submitting. This answer handles only the first two options.
If you want to disallow user input entirely, maybe select
would be a better choice.
To show only the text value of the option
in the dropdown, we use the inner text for it and leave out the value
attribute. The actual value that we want to send along is stored in a custom data-value
attribute:
To submit this data-value
we have to use an <input type="hidden">
. In this case we leave out the name="answer"
on the regular input and move it to the hidden copy.
<input list="suggestionList" id="answerInput">
<datalist id="suggestionList">
<option data-value="42">The answer</option>
</datalist>
<input type="hidden" name="answer" id="answerInput-hidden">
This way, when the text in the original input changes we can use javascript to check if the text also present in the datalist
and fetch its data-value
. That value is inserted into the hidden input and submitted.
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'),
inputValue = input.value;
hiddenInput.value = inputValue;
for(var i = 0; i < options.length; i++) {
var option = options[i];
if(option.innerText === inputValue) {
hiddenInput.value = option.getAttribute('data-value');
break;
}
}
});
The id answer
and answer-hidden
on the regular and hidden input are needed for the script to know which input belongs to which hidden version. This way it's possible to have multiple input
s on the same page with one or more datalist
s providing suggestions.
Any user input is submitted as is. To submit an empty value when the user input is not present in the datalist, change hiddenInput.value = inputValue
to hiddenInput.value = ""
Working jsFiddle examples: plain javascript and jQuery
How to display only the text in datalist HTML5 and not the value?
Edit, updated
Following Regent
Try (v3)
html
<input id="selected" list="browsers" name="browser">
<datalist id="browsers">
<option data-value="InternetExplorer" value="1"></option>
<option data-value="Firefox" value="2"></option>
<option data-value="Chrome" value="3"></option>
<option data-value="Opera" value="4"></option>
<option data-value="Safari" value="5"></option>
</datalist>
<input id="submit" type="submit">
js
$(document).ready(function() {
var data = {};
$("#browsers option").each(function(i,el) {
data[$(el).data("value")] = $(el).val();
});
// `data` : object of `data-value` : `value`
console.log(data, $("#browsers option").val());
$('#submit').click(function()
{
var value = $('#selected').val();
alert($('#browsers [value="' + value + '"]').data('value'));
});
});
jsfiddle http://jsfiddle.net/guest271314/j7ehtqjd/13/
Displaying one value and submitting another through html datalist and *ngFor
The datalist tag will by definition render the value
attribute of each option
in the select list and then you additionally displayed {{d.val}}
as a label (aame as setting the label
attribute). Also, see this answer.
datalist
just behaves differently than select
. It's not possible to have different display/submit values for it without writing additional javascript code.
Related Topics
How to Disable HTML Button Using JavaScript
How to Open a Pdf File in an ≪Iframe≫
Good Tutorial For Using Html5 History API (Pushstate)
How to Fix Getimagedata() Error the Canvas Has Been Tainted by Cross-Origin Data
How to Change CSS Property Using JavaScript
How to Validate Inputs Dynamically Created Using Ng-Repeat, Ng-Show (Angular)
Browser/Html Force Download of Image from Src="Data:Image/Jpeg;Base64..."
How to Read Text File in JavaScript
Show Datalist Labels But Submit the Actual Value
Remember and Repopulate File Input
Innertext VS Innerhtml VS Label VS Text VS Textcontent VS Outertext
How to Create a Link Using JavaScript
How to Change an Element'S Class With JavaScript