ध्यान दें कि 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=""
घोषित होता है, तो टैग के भीतर एक स्ट्रिंग पर वरीयता लेनी चाहिए । तो सुझाव यह होगा कि आप अपने मूल्य विशेषता को "उत्तर" दें।