2008-10-20 13 views
6

मुझे टेक्स्ट इनपुट 'टेक्स्ट' में बदलने की आवश्यकता है। लिखते समय ',' करने के लिए। आईई में मैं कुंजी दबाने घटना में कीकोड घटना संपत्ति बदलने के लिए, इसफ़ायरफ़ॉक्स में टाइप किए गए वर्णों को कैसे बदलें

document.getElementById('mytext').onkeypress = 
function (evt) { 
    var e = evt || window.event; 
    if (e.keyCode && e.keyCode==46) 
    e.keyCode = 44; 
    else if (e.which && e.which==46) { 
    e.which = 44; 
    } 
}; 

की तरह है, लेकिन यह seemes कि फ़ायरफ़ॉक्स में यह महत्वपूर्ण घटनाओं में टाइप पात्रों को बदलने के लिए असंभव है। कोई सुझाव?

+1

आप यह क्यों चाहते हैं? मेरे लिए एक उपयोगकर्ता के रूप में यह थोड़ा अजीब लगेगा कि अगर मैं '।' टाइप करता हूं यह इनपुट क्षेत्र में ',' दिखाएगा। मुझे शायद लगता है कि मैंने गलत कुंजी मारा है और पुनः प्रयास करें। – Gene

+0

Concur। मुझे लगता है कि ब्राउज़र दक्षिण जा रहा है, और इसे पुनरारंभ करें। जब यह काम नहीं करता, तो मैं वेबसाइट से परहेज करना शुरू कर दूंगा। –

+0

उपर्युक्त टिप्पणी करने वालों के लिए (और अगले लोग सोच रहे हैं!): एक्सेल का मेरा फ्रेंच संस्करण संख्यात्मक कीपैड डॉट के लिए करता है ...ऐसा इसलिए है क्योंकि फ्रांसीसी लोग (और कुछ अन्य राष्ट्रीयताएं) कोमा को दशमलव विभाजक के रूप में उपयोग करते हैं, न कि डॉट। मुझे लगता है कि पियर की एक समान आवश्यकता है। – PhiLho

उत्तर

5

इसे आजमाएं। यह सभी ब्राउज़रों पर काम करता है:

window.onload = function() { 
    var input = document.getElementById("mytext"); 

    input.onkeypress = function() { 
     var evt = arguments[0] || event; 
     var char = String.fromCharCode(evt.which || evt.keyCode); 

     // Is it a period? 
     if (char == ".") { 
      // Replace it with a comma 
      input.value += ","; 

      // Cancel the original event 
      evt.cancelBubble = true; 
      return false; 
     } 
    } 
}; 

अद्यतन:पियर लुइगी ऊपर के साथ एक समस्या बताया। यह पाठ के अंत में नहीं होने वाली देखभाल स्थिति का ख्याल नहीं रखता है। यदि आप मूल्य में कुछ टेक्स्ट डाल रहे हैं तो भी यह अंत तक कमांड को जोड़ देगा।

कॉमा कुंजी के लिए एक कीप्रेस ईवेंट अनुकरण करने के लिए, कॉमा को जोड़ने के बजाय समाधान होगा। दुर्भाग्यवश विभिन्न ब्राउज़रों में सिंथेटिक घटनाओं के काम को प्रेषित करने का तरीका बहुत विविधता दिखाता है और यह एक आसान काम नहीं है। मैं देखूंगा कि क्या मैं इसके लिए एक अच्छी और सामान्य विधि पा सकता हूं।

+1

आपका समाधान कैरेट स्थिति की देखभाल नहीं करता है: यदि उपयोगकर्ता टाइप "।" पाठ के अंत में नहीं? –

+1

@ पियर लुइगी: इसे बढ़ाने के लिए धन्यवाद। मैं अपना जवाब अपडेट करूंगा। –

1

तकनीकी रूप से आप बस सभी डॉट्स को अल्पविराम से बदलना चाहते हैं।

document.getElementById('mytext').onkeyup = function(){ 
    this.value = this.value.replace('.', ','); 
} 
+0

हाँ यह काम करता है, लेकिन यह कैरेट स्थिति बदलता है !! –

+0

कैरेट स्थिति कैप्चर करें, अक्षर बदलें, कैरेट स्थिति बदलें। – eyelidlessness

2

मान लें कि किसी ईवेंट ऑब्जेक्ट में सभी गुण अपरिवर्तनीय हैं। जब आप उन मानों को मैन्युअल रूप से बदलते हैं तो DOM spec यह नहीं बताता है कि क्या होता है।

यहां आपको आवश्यक तर्क है: सभी प्रमुख घटनाओं के लिए सुनो। यदि यह एक अवधि है, घटना दबाएं, और कर्सर स्थिति पर मैन्युअल रूप से अल्पविराम जोड़ें। (कर्सर स्थिति पर मनमाने ढंग से पाठ डालने के लिए यहां a code snippet है।)

आप event.preventDefault() पर कॉल करके फ़ायरफ़ॉक्स में ईवेंट को दबाएंगे; यह ब्राउजर को इस घटना से जुड़े डिफ़ॉल्ट क्रिया से आगे नहीं बढ़ने के लिए कहता है (इस मामले में, चरित्र टाइप करना)। आप event.returnValue से false पर सेट करके आईई में ईवेंट को दबाएंगे।

यदि यह अवधि नहीं है, तो अपने हैंडलर से जल्दी वापस आएं।

+0

धन्यवाद, यह काम करता है! मैं आपके कोड स्निपेट को अपनाऊंगा, हालांकि थोड़ा सुधार के साथ क्योंकि फ़ायरफ़ॉक्स में यह कैरेट स्थिति को पुनर्स्थापित नहीं करता है। –

0

क्या यह वास्तव में फ्लाई पर किया जाना चाहिए? यदि आप किसी फॉर्म में पोस्ट करने या किसी डेटाबेस में सबमिट की जाने वाली जानकारी एकत्रित कर रहे हैं, तो क्या डेटा सबमिट करने के बाद डेटा को संशोधित करना बेहतर नहीं होगा? इस तरह उपयोगकर्ता कभी भ्रमित परिवर्तन को नहीं देखता है।

+0

इस तथ्य के बाद कुछ बदलना ज्यादा भ्रमित नहीं है? – eyelidlessness

1

यदि मैं आधिकारिक Document Object Model Events दस्तावेज़ देखता हूं, तो माउस ईवेंट फ़ील्ड को केवल पढ़ने के लिए परिभाषित किया जाता है। कीबोर्ड कार्यक्रमों को परिभाषित नहीं किया गया है, मुझे लगता है कि मोज़िला ने उनके लिए इस नीति का पालन किया था।

तो मूल रूप से, जब तक कि कुछ स्मार्ट चाल न हो, आप किसी भी तरह की घटना को बदल नहीं सकते हैं। आपको शायद कुंजी को अवरुद्ध करना होगा और चार (कच्चे या अनुवादित) को डालना होगा जहां कैरेट है, जिस तरह से जेएस एचटीएमएल संपादक करते हैं।

संबंधित मुद्दे