A datalistile aynı şey olmadığını unutmayın select. Kullanıcıların listede olmayan özel bir değer girmelerine olanak tanır ve bu tür bir giriş için önce onu tanımlamadan alternatif bir değer getirmek imkansız olacaktır.
Kullanıcı girdilerini işlemenin olası yolları, girilen değeri olduğu gibi göndermek, boş bir değer göndermek veya göndermeyi önlemektir. Bu cevap yalnızca ilk iki seçeneği ele alır.
Kullanıcı girişine tamamen izin vermemek istiyorsanız, belki selectdaha iyi bir seçim olabilir.
optionAçılır listedeki yalnızca metin değerini göstermek için , bunun için iç metni kullanırız ve valueniteliği dışarıda bırakırız . Göndermek istediğimiz gerçek değer, özel bir data-valueöznitelikte saklanır :
Bunu göndermek data-valueiçin bir <input type="hidden">. Bu durumda name="answer", normal girdiyi dışarıda bırakır ve onu gizli kopyaya taşırız.
<input list="suggestionList" id="answerInput">
<datalist id="suggestionList">
<option data-value="42">The answer</option>
</datalist>
<input type="hidden" name="answer" id="answerInput-hidden">
Bu şekilde, orijinal girdideki metin değiştiğinde, metnin de içinde bulunup bulunmadığını kontrol etmek için javascript kullanabiliriz datalistve data-value. Bu değer gizli girdiye eklenir ve gönderilir.
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;
}
}
});
Komut dosyasının hangi girdinin hangi gizli sürüme ait olduğunu bilmesi için id answerve answer-hiddennormal ve gizli girdiye ihtiyaç vardır. Bu şekilde input, bir veya daha fazla datalistöneriyle aynı sayfada birden çok URL'ye sahip olmak mümkündür .
Herhangi bir kullanıcı girişi olduğu gibi gönderilir. Kullanıcı girişi veri listesinde bulunmadığında boş bir değer göndermek için şu şekilde değiştirin hiddenInput.value = inputValue:hiddenInput.value = ""
Çalışma jsFiddle örnekleri: düz javascript ve jQuery
value="", birvalue=""bildirilen olduğunda, etiketlerin içindeki bir dizeden öncelikli olması gerektiği görülüyor . Dolayısıyla öneri, değer özelliğinizin "cevabını" yapmanız olacaktır.