ध्यान दें कि datalistएक के रूप में ही नहीं है select। यह उपयोगकर्ताओं को एक कस्टम मान दर्ज करने की अनुमति देता है जो सूची में नहीं है, और पहले इसे परिभाषित किए बिना ऐसे इनपुट के लिए वैकल्पिक मूल्य प्राप्त करना असंभव होगा।
उपयोगकर्ता इनपुट को संभालने के संभावित तरीके हैं, जैसे कि दर्ज किए गए मान को जमा करना है, एक रिक्त मान सबमिट करें, या सबमिट करने से रोकें। यह उत्तर केवल पहले दो विकल्पों को संभालता है।
यदि आप उपयोगकर्ता इनपुट को पूरी तरह से selectसमाप्त करना चाहते हैं , तो शायद एक बेहतर विकल्प होगा।
optionड्रॉपडाउन में केवल पाठ मान दिखाने के लिए , हम इसके लिए आंतरिक पाठ का उपयोग करते हैं और valueविशेषता को छोड़ देते हैं । वास्तविक मूल्य जिसे हम साथ भेजना चाहते हैं, एक कस्टम data-valueविशेषता में संग्रहीत है :
इसे जमा करने के लिए data-valueहमें एक का उपयोग करना होगा <input type="hidden">। इस मामले में हम name="answer"नियमित इनपुट पर छोड़ देते हैं और इसे छिपी प्रतिलिपि में स्थानांतरित कर देते हैं।
<input list="suggestionList" id="answerInput">
<datalist id="suggestionList">
<option data-value="42">The answer</option>
</datalist>
<input type="hidden" name="answer" id="answerInput-hidden">
इस तरह, जब मूल इनपुट में पाठ बदलता है, तो हम यह जांचने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं कि क्या पाठ भी इसमें मौजूद है datalistऔर उसे लाने के लिए data-value। उस मूल्य को छिपे हुए इनपुट में डाला जाता है और जमा किया जाता है।
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;
}
}
});
स्क्रिप्ट को जानने के लिए आईडी answerऔर answer-hiddenनियमित और छिपे हुए इनपुट की आवश्यकता होती है कि कौन सा इनपुट किस छिपे हुए संस्करण से संबंधित है। इस तरह inputसे एक या अधिक datalistसुझाव देने वाले एक ही पृष्ठ पर कई एस होना संभव है ।
किसी भी उपयोगकर्ता इनपुट के रूप में प्रस्तुत किया गया है। एक खाली मूल्य परिवर्तन सबमिट करने के जब उपयोगकर्ता इनपुट DataList में मौजूद नहीं है, hiddenInput.value = inputValueकरने के लिएhiddenInput.value = ""
कार्यशील jsFiddle उदाहरण: सादे जावास्क्रिप्ट और jQuery
value=""जब भी कोईvalue=""घोषित होता है, तो टैग के भीतर एक स्ट्रिंग पर वरीयता लेनी चाहिए । तो सुझाव यह होगा कि आप अपने मूल्य विशेषता को "उत्तर" दें।