कीस्ट्रोक्स के लिए जाँच केवल एक आंशिक समाधान है, क्योंकि माउस क्लिक का उपयोग करके इनपुट क्षेत्र की सामग्री को बदलना संभव है। यदि आप एक टेक्स्ट फ़ील्ड में राइट-क्लिक करते हैं, तो आपके पास कट और पेस्ट के विकल्प होंगे जिन्हें आप काइस्ट्रोकेक बिना मूल्य बदलने के लिए उपयोग कर सकते हैं। इसी तरह, यदि स्वत: पूर्ण सक्षम है, तो आप किसी फ़ील्ड में लेफ्ट-क्लिक कर सकते हैं और पहले से दर्ज किए गए टेक्स्ट का ड्रॉपडाउन प्राप्त कर सकते हैं, और आप माउस क्लिक का उपयोग करके अपनी पसंद में से चयन कर सकते हैं। कीस्ट्रोक फंसने से इस प्रकार के परिवर्तनों का पता नहीं लगेगा।
अफसोस की बात है कि कोई भी "ऑनकॉन्ग" घटना नहीं है जो रिपोर्ट तुरंत बदल जाती है, कम से कम जहां तक मुझे पता है। लेकिन एक समाधान है जो सभी मामलों के लिए काम करता है: setInterval () का उपयोग करके एक समय घटना सेट करें।
मान लें कि आपके इनपुट फ़ील्ड में एक आईडी और "शहर" का नाम है:
<input type="text" name="city" id="city" />
"शहर" नामक एक वैश्विक चर है:
var city = "";
इसे अपने पेज इनिशियलाइज़ेशन में जोड़ें:
setInterval(lookForCityChange, 100);
फिर एक लुक को परिभाषित करेंCityChange () फ़ंक्शन:
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
इस उदाहरण में, हर 100 मिलीसेकंड में "शहर" का मूल्य जांचा जाता है, जिसे आप अपनी आवश्यकताओं के अनुसार समायोजित कर सकते हैं। यदि आप पसंद करते हैं, तो लुकफ़ॉरसिटीसचेंज () को परिभाषित करने के बजाय एक अनाम फ़ंक्शन का उपयोग करें। ध्यान रखें कि आपका कोड या यहां तक कि ब्राउज़र इनपुट फ़ील्ड के लिए एक प्रारंभिक मूल्य प्रदान कर सकता है ताकि आपको उपयोगकर्ता द्वारा कुछ भी होने से पहले "परिवर्तन" के बारे में सूचित किया जा सके; अपने कोड को आवश्यकतानुसार समायोजित करें।
यदि एक सेकंड के हर दसवें भाग में होने वाली टाइमिंग इवेंट का विचार अस्वाभाविक लगता है, तो आप इनपुट फ़ील्ड प्राप्त होने पर टाइमर को आरंभ कर सकते हैं और इसे ब्लर पर (ClearInterval () के साथ) समाप्त कर सकते हैं। मुझे नहीं लगता कि फोकस प्राप्त किए बिना किसी इनपुट फ़ील्ड के मूल्य को बदलना संभव है, इसलिए इस फैशन में टाइमर को चालू और बंद करना सुरक्षित होना चाहिए।