Im बिल्डिंग वेब ऐप जो मुख्य रूप से मोबाइल ब्राउज़र के लिए है। Im नंबर फ़ील्ड के साथ इनपुट फ़ील्ड का उपयोग कर रहा है, इसलिए (अधिकांश) मोबाइल ब्राउज़र बेहतर उपयोगकर्ता अनुभव के लिए केवल नंबर कीबोर्ड का उपयोग करता है। यह वेब ऐप मुख्य रूप से उन क्षेत्रों में उपयोग किया जाता है जहां दशमलव विभाजक कोमा है, डॉट नहीं, इसलिए मुझे दोनों दशमलव विभाजकों को संभालने की आवश्यकता है।
इस पूरे मेस को डॉट और कॉमा से कैसे कवर किया जाए?
मेरे निष्कर्ष:
डेस्कटॉप क्रोम
- इनपुट प्रकार = संख्या
- उपयोगकर्ता इनपुट क्षेत्र में "4,55" में प्रवेश करता है
$("#my_input").val();
"455" लौटाता है- मुझे इनपुट से सही मूल्य नहीं मिल सकता है
डेस्कटॉप फ़ायरफ़ॉक्स
- इनपुट प्रकार = संख्या
- उपयोगकर्ता इनपुट क्षेत्र में "4,55" में प्रवेश करता है
$("#my_input").val();
"4,55" देता है- ठीक है, मैं कॉमा को डॉट से बदल सकता हूं और सही फ्लोट प्राप्त कर सकता हूं
Android ब्राउज़र
- इनपुट प्रकार = संख्या
- उपयोगकर्ता इनपुट क्षेत्र में "4,55" में प्रवेश करता है
- जब इनपुट फोकस खो देता है, तो मान को "4" पर काट दिया जाता है
- उपयोगकर्ता को भ्रमित करना
विंडोज फोन 8
- इनपुट प्रकार = संख्या
- उपयोगकर्ता इनपुट क्षेत्र में "4,55" में प्रवेश करता है
$("#my_input").val();
"4,55" देता है- ठीक है, मैं कॉमा को डॉट से बदल सकता हूं और सही फ्लोट प्राप्त कर सकता हूं
इस तरह की स्थितियों में "सर्वोत्तम अभ्यास" क्या हैं जब उपयोगकर्ता दशमलव विभाजक के रूप में अल्पविराम या डॉट का उपयोग कर सकता है और मैं बेहतर उपयोगकर्ता अनुभव प्रदान करने के लिए html इनपुट प्रकार को नंबर के रूप में रखना चाहता हूं?
क्या मैं कॉमा को डॉट "कन्वर्ट ऑन द फ्लाई" में बदल सकता हूं, जो महत्वपूर्ण घटनाओं को बाध्य करता है, क्या यह नंबर इनपुट के साथ काम कर रहा है?
संपादित करें
Currenlty मेरे पास कोई हल नहीं है, कैसे इनपुट से फ्लोट मान (स्ट्रिंग या संख्या के रूप में) प्राप्त किया जाए जो प्रकार संख्या पर सेट है। यदि एंड्यूसर "4,55" में प्रवेश करता है, तो क्रोम हमेशा "455" देता है, फ़ायरफ़ॉक्स "4,55" देता है जो ठीक है।
यह भी काफी कष्टप्रद है कि एंड्रॉइड (4.2 एमुलेटर का परीक्षण किया गया) में, जब मैं इनपुट क्षेत्र में "4,55" दर्ज करता हूं और फोकस को कहीं और बदल देता हूं, तो दर्ज संख्या "4" से कम हो जाती है।
var number = $(...).get(0).valueAsNumber;
if (isNaN(number)) number = parseFloat($(...).val().replace(',', '.');
लेकिन वह समाधान केवल काम करता है अगर संख्या है कि केवल 1 अल्पविराम और कोई अतिरिक्त डॉट्स में डाल दिया गया है ...
.val()
करता है, और एंड्रॉइड कुछ अजीब करता है। क्या आप जाँच सकते हैं कि जब वे सिस्टम भाषा को किसी उपयुक्त चीज़ पर सेट करते हैं तो वे उसी तरह का व्यवहार करते हैं?