2013-05-07 7 views
7

कुछ सत्यापन कोड लिखते समय बस jQuery में अजीब कुछ ठोकर खाई- मेरे पास एक html5 "संख्या" फ़ील्ड है;jQuery वैल किसी संख्या फ़ील्ड (क्रोम के तहत) से गैर संख्यात्मक इनपुट वापस करने से इंकार कर देता है

<input type="number" class="required numeric" /> 

मेरे स्क्रिप्ट तो कक्षाएं बाहर की जाँच करें और आवश्यकतानुसार मान्य पृष्ठ पर हर क्षेत्र में दिखेगा। मैंने अजीब बात से देखा कि अगर मैं अपने अंकीय क्षेत्रों में से एक में 'एक्स' दर्ज करता हूं तो मुझे "यह एक संख्या होना चाहिए" त्रुटि के बजाय "कृपया इस क्षेत्र में एक मान दर्ज करें" त्रुटि प्राप्त करें। कुछ सिर खरोंचने के बाद और बहुत सारे डिबगिंग के बाद मैंने अपने सिद्धांत को डेमो करने के लिए एक जेएसफ़िल्ड खटखटाया- ऐसा लगता है कि यदि आप किसी वर्ण को किसी फ़ील्ड में दर्ज करते हैं, तो jquery से .val() करने का प्रयास करें, यह कुछ भी वापस नहीं करेगा- हालांकि क्षेत्र खाली था (मैं क्रोम में इस पर आया - यह सुनिश्चित नहीं है कि यह सभी ब्राउज़रों में इस तरह काम करता है);

http://jsfiddle.net/shawson/SE46L/3/

यहाँ fiddle- कुछ नंबर दर्ज है, तो कुछ अक्षर crazyness को देखने के लिए। किसी को पता है कि यह डिजाइन द्वारा है, और यदि ऐसा है तो क्यों?

+1

वर्क्स, क्रोम विशिष्ट होना चाहिए, और मैं सफारी भी अनुमान लगा रहा हूँ के रूप में यह "संख्या" renders एक ही विशेषता। –

+0

कितना कष्टप्रद- हाँ बस आईई 10 की कोशिश की और यह इसके साथ ठीक काम करता है! – Shawson

+0

यह एक jQuery मुद्दा नहीं है - तत्व स्वयं गैर-संख्यात्मक इनपुट के लिए एक खाली स्ट्रिंग लौटा रहा है। – Alnitak

उत्तर

9

यह एक jQuery मुद्दा नहीं है। यदि आप मूल तत्व का उपयोग करते हैं तो आप एक ही परिणाम प्राप्त करेंगे .value (उदा। GetElementByID ('कुछ') के साथ। मान)। क्रोम इनपुट प्रकार = संख्या के साथ कैसे काम करता है यह कर्कश है और आप टाइप = टेक्स्ट और पैटर्न प्रॉपर्टी का उपयोग कर इसके आसपास काम करना चुन सकते हैं।

अधिक पृष्ठभूमि के लिए this older question देखें।

+0

हाँ अच्छा चिल्लाओ- मैंने उन्हें अभी " टेक्स्ट "फ़ील्ड अब। – Shawson

+4

यह दुर्भाग्यपूर्ण डाउनसी है कि ए) आसानी से इनपुट करने के लिए ऊपर और नीचे तीर छोटे पूर्णांक गायब हो जाते हैं और बी) मोबाइल डिस्प्ले (टैबलेट, स्मार्टफ़ोन) पर कीबोर्ड स्वचालित रूप से संख्याएं नहीं दिखाएगा बल्कि इसके बजाय पूर्ण एबीसी कीबोर्ड दिखाएगा। – user1884155

+0

"quirk" spec है: https://www.w3.org/TR/html5/forms.html#number-state-(type=number): "यदि तत्व का मान मान्य फ़्लोटिंग नहीं है- बिंदु संख्या, फिर इसे खाली स्ट्रिंग पर सेट करें "। यदि आपको खाली स्ट्रिंग वापस मिलती है और अमान्य मान चाहते हैं: अस्थायी रूप से इनपुट प्रकार को "टेक्स्ट" में बदलें, फिर से मूल्य पुनर्प्राप्त करें, इसे वापस टाइप करें = "संख्या" –

1

क्रोम में एक ही समस्या के पार आया, जब वे गैर संख्यात्मक हों तो टाइप = संख्या पर कोई मूल्य नहीं देंगे। मेरे आस-पास के काम को केवल मूल्य के मूल्य को निर्धारित करना था। इस तरह यह आपको पहले स्थान पर गैर संख्यात्मक मान दर्ज नहीं करेगा। यह एक हैक है लेकिन यह काम करता है।

जैसे:

फ़ायरफ़ॉक्स में
$('body').find('input[type="number"]').each(function(k,v) { 

    $(this).on('keyup blur', function() { 
     $(this).val($(this).val()); 
    }); 

}); 
+1

वास्तव में औसत समय के लिए संख्या प्रकारों को छोड़ दिया गया है फ़ायरफ़ॉक्स में इनपुट बॉक्स पर फोकस खोने के मुद्दे हैं। – user3594630

+0

इस समाधान के साथ, उपयोगकर्ता लगातार संख्या की शुरुआत में टाइप नहीं कर सकता क्योंकि यह लगातार कैरेट को अंत में ले जाता है। – Pang

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