2011-10-17 17 views
21

मैं एक क्षेत्र है:मैं एचटीएमएल 5 नंबर फ़ील्ड को पिछला शून्य दिखा सकता हूं?

<input type='number' /> 

मैं 0.50 में पंच करने के लिए बिना यह 0.5 करने के लिए "यह सही करने" करना चाहते हैं, तो यह 0.50 नज़र आए।

+0

पॉल संपादित करने के लिए धन्यवाद कि शीर्षक अधिक संक्षिप्त है। – Akshat

उत्तर

11

मेरे पास इसके साथ थोड़ा सा खेल रहा है और spec को देखा है। यह कहता है कि यह एक वैध फ़्लोटिंग पॉइंट नंबर होना चाहिए।

संख्या के n के रूप में एक चल बिन्दु संख्या है स्ट्रिंग n के लिए जावास्क्रिप्ट ऑपरेटर ToString लागू करने से प्राप्त सबसे अच्छा प्रतिनिधित्व: वहाँ definition of a valid floating point number यह देता है जो मेरे ध्यान आकर्षित में एक वाक्य है।

इसका मतलब यह है कि प्रारूप हमेशा संख्या का आकलन करने के साथ संगत रहेगा, फिर उस नंबर पर जावास्क्रिप्ट के ट्रेसिंग का उपयोग करके। तो तब कोई पिछला 0s।

तो, आपको जावास्क्रिप्ट का सहारा लेना होगा। यह सीधा नहीं है क्योंकि document.getElementById('numInput').value = '0.50'; अभी भी 0.5 पर सही हो गया है, इसलिए सत्यापन onchange पर ट्रिगर नहीं किया गया है जहां डिफ़ॉल्ट कार्रवाई को रोका जा सकता है, यह आंतरिक रूप से ट्रिगर किया गया है।

यह सबसे अच्छा समाधान मैं के साथ आ सकता है ... यह एक हैक का एक सा है, और मजबूती के लिए सुधार करने का एक सा की आवश्यकता होगी है, लेकिन उम्मीद है कि यह तुम क्या चाहते करेंगे:

var numInput = document.getElementById('numInput'); 
numInput.addEventListener('keypress', function() { 
    this.setAttribute('type', 'text'); 
}); 
numInput.addEventListener('click', function() { 
    this.setAttribute('type', 'number'); 
}); 

तो यदि उपयोगकर्ता टाइप करके नंबर दर्ज करना चाहता है, तो यह इनपुट प्रकार को टेक्स्ट पर स्विच करता है, लेकिन जब वे इसे क्लिक करते हैं, तो यह इसे वापस एक नंबर पर परिवर्तित करता है।

आप हमेशा कोई बात नहीं क्या उपयोगकर्ता प्रकार अनुगामी 0s चाहते हैं, तो आप इसे कुछ इस तरह कर सकता है:

var numInput = document.getElementById('numInput'); 
numInput.addEventListener('blur', function() { 
    if (this.value === '') { 
     return; 
    } 
    this.setAttribute('type', 'text'); 
    if (this.value.indexOf('.') === -1) { 
     this.value = this.value + '.00'; 
    } 
    while (this.value.indexOf('.') > this.value.length - 3) { 
     this.value = this.value + '0'; 
    } 
}); 
numInput.addEventListener('focus', function() { 
    this.setAttribute('type', 'number'); 
}); 

संपादित करें: मुझे लगता है कि दूसरा समाधान क्या उपयोगकर्ता के साथ और अधिक इनलाइन है उम्मीद कर सकते हैं, लेकिन इसका मतलब है कि यदि उपयोगकर्ता 0.5 टाइप करता है तो इसे 0.50 पर ले जाया जाएगा, इसलिए यह निर्भर करता है कि आप यही चाहते हैं।

+0

दशमलव और सही संख्याओं के बीच स्विचिंग और स्विचिंग द्वारा इसे हल करने के लिए एक बहुत ही स्मार्ट तरीका है। धन्यवाद! – Akshat

+3

खुशी है कि आप इसे पसंद करते हैं। यह आईएमओ एचटीएमएल 5 spec में कमी है, इसलिए उम्मीद है कि कोई इसे महसूस करेगा और भविष्य में किसी बिंदु पर इसे ठीक करेगा। –

+0

अच्छा समाधान। मैंने केवल निर्दिष्ट इनपुट को प्रभावित करने के लिए इसे थोड़ा सा विस्तारित किया, और इनपुट बटन दबाए जाने के बावजूद पीछे की ओर शून्य बनाए रखने के लिए 'परिवर्तन' ईवेंट का भी उपयोग किया। पता नहीं क्यों यह सादा जेएस 'बदले' के साथ काम नहीं किया, इसलिए मैंने इसे JQuery में किया। केवल क्रोम पर परीक्षण किया गया: '$ ('input.float')। प्रत्येक (फ़ंक्शन (अनुक्रमणिका) { \t $ (यह)।परिवर्तन (समारोह (घटना) { \t \t अगर (this.value === '') { \t \t \t वापसी; \t \t} \t \t अगर (this.value.indexOf ('।') === -1) { \t \t \t this.value = this.value + '.00'; \t \t} \t \t जबकि (this.value.indexOf ('।')> this.value.length - 3) { \t \t \t this.value = this.val ue + '0'; \t \t} \t}); }); ' – YOMorales

9

मैं संलग्न ('परिवर्तन') इनपुट करने के लिए घटना पर एक आप अनुगामी करना चाहते हैं 0 के

$('.number-input').on('change', function(){ 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 

यह सिर्फ मूल्य लेता है, एक नाव के लिए डाले, एक स्ट्रिंग के लिए यह संख्या के लिए renders दशमलव स्थानों का, और इसे मूल्य के रूप में वापस रखता है।

+0

पहले से ही jQuery – Mikey

+3

का उपयोग करने वाले लोगों के लिए अच्छा संक्षिप्त समाधान यह एक समस्या का एक बड़ा समाधान है जो अस्तित्व में नहीं होना चाहिए। –

+5

क्रोम में काम करता है लेकिन फ़ायरफ़ॉक्स में काम नहीं करता प्रतीत होता है – WebChemist