2012-01-08 6 views
7

मैंने SO पर अन्य प्रश्नों की जांच की है, हालांकि वे मेरे प्रश्न का उत्तर नहीं देते हैं। मैं बस कुछ कीकोड पकड़ना चाहता हूं और इसे दूसरे के साथ बदलना चाहता हूं। मैं पात्रों के साथ काम कर रहा हूं, सफेद जगह नहीं, और मुझे फोकस या पसंद को खोने की जरूरत नहीं है।event.keyCode को कैसे पकड़ें और इसे किसी अन्य कुंजीकोड में बदलें?

नीचे मेरा कोड है। लेकिन आप उन कुंजीकोड को अपने साथ बदल सकते हैं (उदाहरण के लिए। जब ​​पूंजी "ए" दबाया जाता है, तो इसे शून्य 0, आदि से प्रतिस्थापित करना चाहिए)। विचार कुंजीकोड को प्रतिस्थापित करना है।

phrase.keypress(function(event) 
{ 
    if (event.shiftKey) 
    { 
     switch (event.keyCode) 
     { 
      // Cyrillic capitalized "Н" was pressed 
      case 1053: event.keyCode = 1187; event.charCode = 1187; event.which = 1187; break; 
      // Cyrillic capitalized "О" was pressed 
      case 1054: event.keyCode = 1257; event.charCode = 1257; event.which = 1257; break; 
      // Cyrillic capitalized "У" was pressed 
      case 1059: event.keyCode = 1199; event.charCode = 1199; event.which = 1199; break; 
     } 
    } 
}); 

मैंने कीटडाउन और कीप के साथ भी कोशिश की। वे कुंजीकोड में बदलाव नहीं करते हैं। मैं उसे कैसे कर सकता हूँ?

पीएस यदि संभव हो, तो मैं ऐसे समाधान की तलाश में हूं जो "event.preventDefault() नहीं है और मैन्युअल रूप से इनपुट फ़ील्ड में वांछित कुंजी डालें, फिर कर्सर को अंत में ले जाएं"। मैं क्लीनर और "सही" समाधान चाहता हूँ। धन्यवाद।

उत्तर

6

कीबोर्ड घटना गुण केवल पढ़ने के लिए सभी कर रहे हैं। आप एक कीकोड को कैप्चर नहीं कर सकते हैं और इसे दूसरे में बदल सकते हैं। Keyboard Events - -

MDN से संदर्भ देखें सभी केवल सेट नहीं किया जा सकता पढ़े जाते हैं।

आप अपनी पोस्ट में उल्लेख किया है। - अगर आप इसे संभालना नहीं चाहते हैं, तो आपको ब्राउज़र डिफ़ॉल्ट कुंजी दबाएं और वांछित मान को तत्व पर सेट करना होगा।

+0

धन्यवाद के बजाय तत्व प्राप्त करने के लिए इसे बदल दिया है। अब मुझे पता है कि वे केवल पढ़ने के लिए हैं। और मैंने "मैनुअल" समाधान लागू किया। – Eye

+0

बस कुछ ऐसा जो मदद कर सकता है। एक सूची जिसे मैंने "कौन" कोड के jquery मंचों पर पोस्ट किया था। हाँ के लिए सहायक हो सकता है। यदि नहीं, तो यहां किसी और के लिए सहायक हो सकता है जो यहां आता है। http://forum.jquery.com/topic/eventwhich-code-list-just-for-help – SpYk3HH

2
मैं एक ही परिणाम प्राप्त करने के रूप में अगर मैं keyCode बदल गया था, वास्तव में इसे बदलने के लिए सक्षम होने के बिना निम्नलिखित कोड का उपयोग कर रहा

function inputValidation() { 
    var srcField = event.srcElement; 
    var sKey = event.keyCode; 
    var inputLetter = String.fromCharCode(sKey); 
    if (typeof(srcField) !== "undefined" && srcField !== null) { 
     inputLetter = transformInput(inputLetter); 
     var caretPos = srcField.selectionStart; 
     var startString = srcField.value.slice(0, srcField.selectionStart); 
     var endString = srcField.value.slice(srcField.selectionEnd, srcField.value.length); 
     srcField.value = startString + inputLetter + endString; 
     setCaretPosition(srcField, caretPos+1); // '+1' puts the caret after the input 
     event.preventDefault ? event.preventDefault() : event.returnValue = false; //for IE8 
    } 
} 

srcField.selectionStart पाठ की प्रारंभिक स्थिति देता है जिसे आपने चुना है और अगर आप किसी भी पाठ srcField.selectionStart के बराबर होती है srcField.selectionEnd चयन नहीं किया है srcField.selectionEnd, चयन के अंत स्थिति देता है।

समारोह setCaretPosition KD7 द्वारा this answer से आया है। मैंने इसे केवल अपने आईडी

function setCaretPosition(elem, caretPos) { 
    if (elem != null) { 
     if (elem.createTextRange) { 
      var range = elem.createTextRange(); 
      range.move('character', caretPos); 
      range.select(); 
     } else { 
      if (elem.selectionStart) { 
       elem.focus(); 
       elem.setSelectionRange(caretPos, caretPos); 
      } else 
       elem.focus(); 
     } 
    } 
} 
संबंधित मुद्दे