में कुंजी ईवेंट को अनुकरण करें जेएस में कुंजी प्रेस (कीडाउन/कीप्रेस) को अनुकरण करने के लिए SO पर कई लेखों के बावजूद, कोई भी समाधान उन ब्राउज़रों के साथ काम नहीं कर रहा है जो मैं उपयोग कर रहा हूं (फ़ायरफ़ॉक्स ईएसआर 17.0। 7, क्रोम 28.0.1500.72, आईई 10)। मैंने जिन समाधानों का परीक्षण किया है उन्हें here, here, और here से लिया गया था।जावास्क्रिप्ट: टेक्स्टबॉक्स/इनपुट
जो मैं करने की कोशिश कर रहा हूं वह टेक्स्टरेरा/इनपुट में किसी भी कीस्ट्रोक को अनुकरण करना है। जबकि मैं "मूल्य" को सीधे बदलते अक्षरों को जोड़/हटा सकता हूं, लेकिन मुझे "अप", "डाउन", "होम" और कुछ अन्य जैसे कुंजी के लिए इनपुट सिमुलेशन नहीं है।
documentation के अनुसार, यह सरल होना चाहिए। उदाहरण के लिए:
var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("text").dispatchEvent(e);
वास्तव में "एंटर" कीडाउन ईवेंट को सक्रिय करता है, और मेरा हैंडलर इसे पकड़ सकता है। हालांकि, यह किसी भी तरह से textarea को प्रभावित नहीं करता है - एक नई लाइन प्रकट नहीं होती है। अन्य कुंजी-कोडों के लिए समान: वर्ण दिखाई नहीं देते हैं, तीर कैरेट के स्थान को नहीं बदलते हैं, आदि
मैंने Orwellophile द्वारा कोड बढ़ाया है और इसे http://jsfiddle.net/npF3d/4/ पर पोस्ट किया है, इसलिए कोई भी कोड के साथ खेल सकता है। मेरे ब्राउज़र में, कोई भी बटन किसी भी स्थिति में टेक्स्टरेरा पर कोई प्रभाव नहीं डालता है।
मैं इस मुद्दे पर किसी भी मदद की सराहना करता हूं।
ठीक प्राप्त कर सकते थे, मैं एक ही लग रहा है कि यह सुरक्षा कारणों के लिए जानबूझकर किया जा सकता था। क्यू/ए के रूप में: संपादन टेक्स्ट कोई समस्या नहीं है, समस्या "ऊपर", "डाउन", "होम" और जैसे अनुकरण करना है ... – lexasss
यदि आप टेक्स्टरेरा को दोबारा बनाते हैं तो संभवतः लागू किया जा सकता है/एक ब्लॉक नोड के रूप में इनपुट जिसमें मिलानिंग रैपिंग, आकार और स्टाइल के साथ प्रत्येक वर्ण के लिए इनलाइन नोड्स होते हैं, फिर आप कहां समाप्त करना चाहते हैं, यह जानने के लिए सभी अलग-अलग संदर्भों की गणना करते हैं। मैं कल्पना नहीं कर सकता कि इसे कार्यान्वित करना आसान हो रहा है ... शायद एक क्लीनर तरीका एक मोनोस्पेस फ़ॉन्ट का उपयोग करेगा, जहां पिछला नया लाइन कैरेक्टर था और फिर वर्णों की गणना करें। –
धन्यवाद। हालांकि, मैं google.com जैसे तीसरे पृष्ठों पर इनपुट अनुकरण करता हूं। मेरा वर्चुअल कीबोर्ड क्रोम एक्सटेंशन के रूप में कार्यान्वित किया गया है और उपयोगकर्ताओं को केवल इस कीबोर्ड का उपयोग करके किसी भी पेज पर फ़ॉर्म में टेक्स्ट टाइप और संशोधित करने में सक्षम होना चाहिए। अगर कुछ कार्यक्षमता को छोड़ दिया जाना चाहिए तो यह एक बड़ी निराशा होगी। – lexasss