मुद्रा के लिए, मेरा सुझाव है:
<div><label>Amount $
<input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>
Http://jsfiddle.net/vx3axsk5/1/ देखें
HTML5 गुण "चरण", "मिनट" और "पैटर्न" फॉर्म सबमिट होने पर मान्य होंगे, ऑनब्लूर नहीं। आप की जरूरत नहीं है stepअगर आप एक है patternऔर आप की जरूरत नहीं है patternअगर आप एक है step। इसलिए आप step="any"मेरे कोड के साथ वापस लौट सकते हैं क्योंकि पैटर्न इसे वैसे भी मान्य करेगा।
यदि आप onblur को मान्य करना चाहते हैं, तो मेरा मानना है कि उपयोगकर्ता को एक दृश्य क्यू देना भी पृष्ठभूमि लाल रंग को रंगने में मददगार है। यदि उपयोगकर्ता का ब्राउज़र समर्थन नहीं करता है, type="number"तो यह वापस आ जाएगा type="text"। यदि उपयोगकर्ता का ब्राउज़र HTML5 पैटर्न सत्यापन का समर्थन नहीं करता है, तो मेरा जावास्क्रिप्ट स्निपेट फ़ॉर्म को सबमिट करने से नहीं रोकता है, लेकिन यह विज़ुअल व्यू देता है। तो गरीब HTML5 समर्थन वाले लोगों के लिए, और जावास्क्रिप्ट अक्षम या HTTP अनुरोधों के साथ डेटाबेस में हैक करने की कोशिश कर रहे लोगों के लिए, आपको सर्वर पर फिर से सत्यापित करने की आवश्यकता है। फ्रंट-एंड पर सत्यापन के साथ बिंदु एक बेहतर उपयोगकर्ता अनुभव के लिए है। इसलिए जब तक आपके अधिकांश उपयोगकर्ताओं के पास अच्छा अनुभव है, HTML5 सुविधाओं पर भरोसा करना ठीक है बशर्ते कि कोड अभी भी काम करेगा और आप बैक-एंड पर सत्यापन कर सकते हैं।