2011-01-05 18 views
18

इनपुट बॉक्स या सामग्रीबद्ध = सही div में, मैं अक्षर "बी" के लिए एक कुंजीब्रेस वापस करने के लिए "ए" अक्षर के लिए एक कुंजीपटल कैसे संशोधित कर सकता हूं? यानी, जब भी आप div में अक्षर "ए" टाइप करते हैं, तो आउटपुट वास्तव में अक्षर "बी" होता है।कुंजीपटल बदलना

मैं उस समाधान से संबंधित नहीं हूं जो IE में काम करता है - केवल सफारी, क्रोम, & एफएफ में काम करता है।

क्रोम में, मैं देख सकता हूं कि एक कीप्रेस ईवेंट में "charCode", "keyCode" और "कौन" गुण होते हैं, जिनमें से सभी को कुंजीपटल ईवेंट नंबर असाइन किया जाता है। अगर मैं एक कीप्रेस पर एक ईवेंट को फायर करता हूं, तो मैं इन मानों को संशोधित कर सकता हूं, लेकिन मुझे यह पता नहीं लगा सकता कि क्या वापस करना है ताकि टाइप की जाने वाली वास्तविक कुंजी अलग हो। उदाहरण के लिए:

$(window).keypress(function(e){ //$(window) is a jQuery object 
    e.charCode = 102; 
    e.which = 102; 
    e.keyCode = 102; 
    console.log(e); 
    return e; 
}); 

मैं भी देख सकते हैं charCode है, जो है, और कीकोड के साथ, वहाँ भी एक "originalEvent" संपत्ति है जो बदले में भी इन गुण है है। हालांकि, मैं उनको संशोधित करने में सक्षम नहीं हूं (मैंने e.originalEvent.charCode = 102 जैसी चीजों के साथ प्रयास किया)।

उत्तर

24

आप किसी कुंजी ईवेंट से जुड़े चरित्र या कुंजी को नहीं बदल सकते हैं, या पूरी तरह से एक महत्वपूर्ण ईवेंट अनुकरण नहीं कर सकते हैं। हालांकि, आप कुंजीपटल को स्वयं संभाल सकते हैं और वर्तमान प्रविष्टि बिंदु/देखभाल पर इच्छित चरित्र को मैन्युअल रूप से सम्मिलित कर सकते हैं। मैंने स्टैक ओवरफ़्लो पर कई स्थानों पर ऐसा करने के लिए कोड प्रदान किया है।http://www.jsfiddle.net/Ukkmu/4/

एक इनपुट के लिए::

क्रॉस-ब्राउज़र jsFiddle उदाहरण: http://www.jsfiddle.net/EXH2k/6/

आईई> = 9 और गैर IE jsFiddle उदाहरण: http://www.jsfiddle.net/EXH2k/7/

+0

धन्यवाद टिम। फ़ंक्शन डालने TextAtCursor() जिसे आपने पहले लिंक में लिखा था वह चाल है! – maxedison

+0

बहुत धन्यवाद टिम, मैं अनुसंधान के मामले में एक दिन पूरा करता हूं "कीवर्ड को अंग्रेजी भाषा में कैसे बदला जाए?" लेकिन मुझे आपका जवाब मिलने तक अनुकूलित और छोटा और समझदार नहीं मिला। –

+0

मैं "गैर-आईई जेएसफ़िल उदाहरण" लागू करूंगा और सभी को मदद करने के लिए स्टैक और गिटबब में साझा किया जाएगा। लागू करें जो अन्य सभी भाषाओं का समर्थन करता है। फिर से धन्यवाद। –

1

आप एक <input> या <textarea> के लिए करते हैं यह सुनिश्चित करें कि मूल्य इसे में किसी भी "एक" वर्ण नहीं है बनाने के है सकता है ठीक है क्या:

$('input.whatever').keypress(function() { 
    var inp = this; 
    setTimeout(function() { 
    inp.value = inp.value.replace(/a/g, 'b'); 
    }, 0); 
}); 

यह दृष्टिकोण शायद सभी संभव नहीं संभाल सकता चाल जो आप कुछ दबा सकते हैं जो वास्तव में "दबाए गए" चरित्र को बदल देता है, लेकिन मुझे वास्तव में ऐसा करने का कोई तरीका नहीं पता है।

संपादित — ओह, और कारण यह है कि मैं के साथ "Fixup" समय समाप्त हैंडलर में क्या हो रहा है कि उदाहरण में टाइप यह सुनिश्चित करें कि ब्राउज़र "कुंजी दबाने" के लिए देशी व्यवहार को संभालने के लिए अवसर है कि बनाता है घटना। जब टाइमआउट हैंडलर कोड चलता है, तो हम सुनिश्चित हैं कि तत्व का मान अपडेट कर दिया जाएगा। इस कोड में कार्गो पंथ का एक स्पर्श है, मुझे एहसास है।

0

मुझे यकीन है कि अगर यह "आसानी से" है नहीं कर रहा हूँ क्या कर सकता है, कुछ इस तरह के साथ:

$(window).keypress(function(e) { 
    //Captures 'a' or 'A' 
    if(e.which == 97 || e.which == 65) 
    { 
     //Simulate a keypress in a specific field 
    } 
}); 

मैं जानता हूँ कि jQuery एक अनुकरण प्लग में कुंजी दबाने घटनाओं अनुकरण करने के लिए आदि, jQuery Simulate है कि है। यह संभवतः कुछ प्रकार के jQuery Trigger() ईवेंट में देखने लायक हो सकता है।

+2

एक कुंजीपटल "अनुकरण" करने के लिए कोड बहुत कठिन होगा, क्योंकि यह है टेक्स्ट फ़ील्ड या टेक्स्टरेरा या जो भी हो, वर्तमान कर्सर की स्थिति को समझना होगा। साथ ही, यह कुंजीपटल के देशी हैंडलिंग को रोकने के लिए 'झूठी' वापस करना सुनिश्चित करना चाहिए। – Pointy

+3

@Pointy: मैंने वह कोड लिखा है। मेरा जवाब देखें –

+0

मैं सहमत हूं - मैं बस इसे एक बहुत ही बुनियादी उदाहरण के रूप में पेश कर रहा था, इसलिए मैंने सिमुलेट प्लग-इन की अनुशंसा की। मुझे यकीन नहीं है कि यह कितना गहराई से है लेकिन यह ओपी की तलाश में लायक हो सकता है। –

1

मेरे समाधान उदाहरण (input[type=text] चरित्र '.' करने के लिए ',' में परिवर्तन):

element.addEventListener('keydown', function (event) { 
if(event.key === ','){ 
    setTimeout(function() { 
    event.target.value += '.'; 
    }, 4); 
    event.preventDefault(); 
}; 
संबंधित मुद्दे