Chrome में इनपुट प्रकार = "संख्या" के लिए अधिकतम गति की अनदेखी की गई


231

maxlengthविशेषता के साथ काम नहीं कर रहा है <input type="number">। ऐसा केवल क्रोम में होता है।

<input type="number" class="test_css"  maxlength="4"  id="flight_number" name="number"/>

जवाबों:


277

के लिए MDN के प्रलेखन से<input>

यदि का मान प्रकार विशेषता है text, email, search, password, tel, या url, इस विशेषता वर्णों की अधिकतम संख्या (यूनिकोड कोड अंक में) है कि उपयोगकर्ता दर्ज कर सकते हैं निर्दिष्ट करता है; अन्य नियंत्रण प्रकारों के लिए, इसे अनदेखा कर दिया जाता है।

तो डिजाइन द्वारा maxlengthनजरअंदाज कर दिया जाता है <input type="number">

अपनी आवश्यकताओं के आधार पर, आप उन विशेषताओं minऔर maxविशेषताओं का उपयोग कर सकते हैं, जो उनके उत्तर में दिए गए इनॉन के रूप में बताए गए हैं (NB: यह केवल एक सीमित सीमा को परिभाषित करेगा, न कि मूल्य की वास्तविक वर्ण लंबाई, हालांकि -9999 से 9999 सभी 0-4 को कवर करेगा। अंक संख्या), या आप एक नियमित पाठ इनपुट का उपयोग कर सकते हैं और नई patternविशेषता के साथ क्षेत्र पर सत्यापन लागू कर सकते हैं :

<input type="text" pattern="\d*" maxlength="4">

13
यह भी ध्यान दें कि type="number"HTML 5 विनिर्देश से एक नया प्रकार है। ब्राउज़र आप में परीक्षण कर रहे हैं नहीं पहचानता है type="number"यह यह मानकर चलेगा type="text"जो करता है सम्मान maxlengthविशेषता। यह आपके द्वारा देखे जा रहे व्यवहार की व्याख्या कर सकता है।
एंड्रे डायोन

8
@fooquency, आप यहाँ सही नहीं हैं, क्योंकि आप वास्तव में "कीबोर्ड इनपुट" की भौतिक लंबाई को विशेषता type=numberसेट करके इनपुट में प्रतिबंधित नहीं कर सकते हैं max। यह विशेषता केवल इनपुट स्पिनर द्वारा चुनी गई संख्या को प्रतिबंधित करती है।
कामिलियस

5
\d*यहाँ क्या है
परदीप जैन

4
पैटर्न = "\ d *" IE11 या फ़ायरफ़ॉक्स 56 में काम नहीं करता है। jsfiddle.net/yyvrz84v
Reado

4
उपयोग करना regexऔर पैटर्न एक अविश्वसनीय रूप से रचनात्मक है। लेकिन मोबाइल में, कोई भिन्न Androidया iOS, यह एक textइनपुट है तो यह एक बुरा कारण है UX
अमेरिकलीका

215

अधिकतम लंबाई अधिकतम <input type="number"तरीके से काम नहीं करेगी, मुझे पता है oninputकि अधिकतम गति को सीमित करने के लिए घटना का उपयोग करना है। कृपया नीचे दिया गया कोड देखें।

<input name="somename"
    oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
    type = "number"
    maxlength = "6"
 />

प्रतिभाशाली। धन्यवाद!
टेकथेलपे

@Guedes संस्करण "संख्या" टाइप करने के लिए सभी परीक्षण उपकरणों में मेरे लिए काम करता है। हालाँकि मैं अभिव्यक्ति के दूसरे भाग को पूरी तरह से नहीं समझता||0/1
बारबेक्यू

34
@Barleby। बस oninput="this.value=this.value.slice(0,this.maxLength)"काम करना चाहिए
वाशिंगटन Guedes

1
@ वाशिंगटनगेज्ड्स के ऊपर दिए गए कोड ने मेरे लिए <input type="number"> stackoverflow.com/questions/18510845/…
डेविड येज़र

1
सावधान रहें कि अग्रणी शून्य इस दृष्टिकोण के साथ प्रदर्शित नहीं होते हैं!
हदीदअली

53

कई लोगों ने onKeyDown()ईवेंट पोस्ट किया जो सीमा तक काम नहीं कर रहा है यानी आप एक बार सीमा तक पहुंच नहीं सकते। इसलिए onKeyDown()उपयोग के बजाय onKeyPress()और यह पूरी तरह से ठीक काम करता है।

नीचे काम कर रहा है कोड:

User will not be allowed to enter more than 4 digits
<br>
<input type="number" pattern="/^-?\d+\.?\d*$/" onKeyPress="if(this.value.length==4) return false;" />


3
यह बहुत मददगार है, html5 numberइनपुट प्रकार
Dexter Bengil

4
मैंने कोशिश की, 4 अंकों में प्रवेश करने के बाद, टेक्स्टबॉक्स, बस किसी भी अपडेट के लिए न तो कमरे के साथ जमी हुई है, न ही डिलीट और न ही बैकस्पेस कीज़ काम करती है, कुछ भी काम नहीं करती है, किसी भी अंक को कैसे संपादित करें, कृपया उल्लेख करें।
अब्बास

1
मैं उर स्निपेट में प्रवेश करने में सक्षम था (1.2.3.4.5.5.6.76.7)
आल्हा

1
यह स्वीकृत उत्तर होना चाहिए। नंबर क्षेत्र रखने के लिए बहुत चतुर तरीका। बस एक मिनट / अधिकतम विशेषता जोड़ना सुनिश्चित करें क्योंकि स्पिन बटन अभी भी 4 अंकों से ऊपर जा सकते हैं यदि उनका उपयोग किया जाता है
NiallMitch14

3
जब आप 9999 टाइप करते हैं तब इनपुट पर काम नहीं करता है।
Csaba Gergely

37

मेरे पास आपके लिए दो तरीके हैं

पहला: उपयोग करें type="tel", यह type="number"मोबाइल की तरह काम करेगा, और अधिकतम गति को स्वीकार करेगा:

<input type="tel" />

दूसरा: जावास्क्रिप्ट का थोड़ा प्रयोग करें:

<!-- maxlength="2" -->
<input type="tel" onKeyDown="if(this.value.length==2 && event.keyCode!=8) return false;" />

2
आपका दूसरा उत्तर बहुत अच्छा नहीं है: यदि आप 2 वर्णों तक पहुँच गए हैं, तो आप किसी भी संख्या को हटा नहीं सकते हैं।
vtni

हां, मैंने यह भी देखा कि एक नंबर इनपुट वैल्यू वापस नहीं करता है। वैसे भी, मैंने इसे बैकस्पेस
कीकोड

2
सरणी कुंजी और डिलीट (फॉरवर्ड) बटन को भी शामिल किया जाना चाहिए।
vtni

यह अच्छा है। और इस के लिए ही काम कर रहे me..upvoted
सलीम अहमद

1
शानदार जवाब, tnx हालाँकि, मुझे इस मामले में 'संख्या' के बजाय 'tel' का उपयोग करने का कारण नहीं मिलता है। इसके अलावा आप अपनी स्थिति को "event.keyCode! = 8" की स्थिति में बदल सकते हैं, केवल "num.keyCode> 47 && event.keyCode <58" के साथ प्राकृतिक संख्या के मामले में उपयोगकर्ता को केवल अंकों को दर्ज करने से अक्षम करने के लिए।
डूडी

28

आप न्यूनतम और अधिकतम विशेषताओं का उपयोग कर सकते हैं ।

निम्नलिखित कोड समान हैं:

<input type="number" min="-999" max="9999"/>

2
मैं कहूंगा कि यह यहां सही उत्तर होना चाहिए। क्रोम कम से कम तब मीनू / अधिकतम मापदंडों के आधार पर बॉक्स को समझदारी से आकार देता है।
विदाई

70
यदि आप लंबाई प्रतिबंध जोड़ना चाहते हैं तो यह काम नहीं करता है, जबकि आप उस संख्या को पार नहीं कर पाएंगे 9999जो उपयोगकर्ता मैन्युअल रूप से उस संख्या से अधिक कर सकता है जो उस लंबाई से अधिक है।
Philll_t

10

अपने इनपुट प्रकार को टेक्स्ट में बदलें और फ़ंक्शन को कॉल करने के लिए "oninput" ईवेंट का उपयोग करें:

<input type="text" oninput="numberOnly(this.id);" class="test_css" maxlength="4" id="flight_number" name="number"/>

अब उपयोगकर्ता इनपुट को फ़िल्टर करने के लिए जावास्क्रिप्ट रेगेक्स का उपयोग करें और इसे केवल संख्याओं तक सीमित करें:

function numberOnly(id) {
    // Get element by id which passed as parameter within HTML element event
    var element = document.getElementById(id);
    // Use numbers only pattern, from 0 to 9
    var regex = /[^0-9]/gi;
    // This removes any other character but numbers as entered by user
    element.value = element.value.replace(regex, "");
}

डेमो: https://codepen.io/aslami/pen/GdPvRY


1
सबसे अच्छा "केवल संख्या" उत्तर मुझे मिला है। अन्य जो evt.keycode का उपयोग कर रहे हैं, वे मेरे android
deebs

1
एक बहुत ही मामूली मोड, "this.id" को "इस", नंबरऑनली (आईडी) से नंबरऑनली (तत्व) में बदलें, फिर आपको नंबरऑनलाइन की पहली पंक्ति की आवश्यकता नहीं है और यह बिना आईडी के काम करता है
टोनी

8

मैं एक बार उसी समस्या में पड़ गया और इस समाधान को अपनी आवश्यकताओं के संबंध में पाया। यह कुछ मदद कर सकता है।

<input type="number" placeholder="Enter 4 Digits" max="9999" min="0" 
onKeyDown="if(this.value.length==4 && event.keyCode>47 && event.keyCode < 58)return false;"
/>

हैप्पी कोडिंग :)


3

आप लंबाई प्रतिबंध के साथ संख्यात्मक इनपुट के लिए भी यह कोशिश कर सकते हैं

<input type="tel" maxlength="4" />

8
कुछ ब्राउज़रों (विशेष रूप से मोबाइल) में, telइनपुट स्वचालित रूप से मान्य होगा और कुछ अजीब मामलों में अग्रणी 0s को 1s में बदल दिया जाएगा ।
Philll_t


3

यहाँ jQuery के साथ मेरा समाधान है ... आपको अपने इनपुट प्रकार = संख्या में अधिकतम गति जोड़ना है

$('body').on('keypress', 'input[type=number][maxlength]', function(event){
    var key = event.keyCode || event.charCode;
    var charcodestring = String.fromCharCode(event.which);
    var txtVal = $(this).val();
    var maxlength = $(this).attr('maxlength');
    var regex = new RegExp('^[0-9]+$');
    // 8 = backspace 46 = Del 13 = Enter 39 = Left 37 = right Tab = 9
    if( key == 8 || key == 46 || key == 13 || key == 37 || key == 39 || key == 9 ){
        return true;
    }
    // maxlength allready reached
    if(txtVal.length==maxlength){
        event.preventDefault();
        return false;
    }
    // pressed key have to be a number
    if( !regex.test(charcodestring) ){
        event.preventDefault();
        return false;
    }
    return true;
});

और कॉपी और पेस्ट संभालें:

$('body').on('paste', 'input[type=number][maxlength]', function(event) {
    //catch copy and paste
    var ref = $(this);
    var regex = new RegExp('^[0-9]+$');
    var maxlength = ref.attr('maxlength');
    var clipboardData = event.originalEvent.clipboardData.getData('text');
    var txtVal = ref.val();//current value
    var filteredString = '';
    var combined_input = txtVal + clipboardData;//dont forget old data

    for (var i = 0; i < combined_input.length; i++) {
        if( filteredString.length < maxlength ){
            if( regex.test(combined_input[i]) ){
                filteredString += combined_input[i];
            }
        }
    }
    setTimeout(function(){
        ref.val('').val(filteredString)
    },100);
});

मुझे उम्मीद है कि यह किसी की मदद करता है।


मेरे पास एक ही विचार था (हालांकि मैंने "इनपुट" ईवेंट का उपयोग किया था), लेकिन मुझे लगता है कि कुछ जवाब के लिए एक टिप्पणी में @WashingtonGuedes ने जो समाधान लिखा है वह बहुत सरल है: this.value = this.value.slice(0, this.maxLength);क्या आपको लगता है कि यह कोई मुद्दा है? मुझे अब तक कोई नहीं मिला है। इसमें पेस्ट किए गए टेक्स्ट को भी शामिल किया गया है।
नॉनजाप्रीज

मुझे लंबा रास्ता पसंद है। RegExp का उपयोग बहुत लचीला है।
harley81

2

मेरे अनुभव में अधिकांश मुद्दे जहां लोग पूछ रहे हैं कि क्यों maxlengthअनदेखा किया गया है क्योंकि उपयोगकर्ता को "अनुमत" वर्णों की संख्या से अधिक इनपुट करने की अनुमति है।

जैसा कि अन्य टिप्पणियों में कहा गया है, type="number"इनपुट में एक maxlengthविशेषता नहीं है और इसके बजाय, एक minऔर maxविशेषता है।

फ़ील्ड को उन वर्णों की संख्या सीमित करने के लिए, जो फ़ॉर्म सबमिट होने से पहले उपयोगकर्ता को इसके बारे में जानकारी देने की अनुमति दी जा सकती है (ब्राउज़र को मूल्य की पहचान करना चाहिए> अधिकतम अन्यथा), आपको (अब के लिए, कम से कम) एक जोड़ना होगा मैदान में श्रोता।

यहाँ एक समाधान है जिसका उपयोग मैंने अतीत में किया है: http://codepen.io/wuori/pen/LNyYBM


न्यूनतम और अधिकतम यहां बेकार के रूप में अच्छे हैं, वे उपयोगकर्ता को इनपुट क्षेत्र में एक अनन्त मात्रा की संख्या टाइप करने से नहीं रोकते हैं।
andresz

सच। एकमात्र समय जब आप उन्हें एक्शन में देखते हैं, जब आप एरो कीज़ या अप / डाउन कंट्रोलर (क्रोम, आदि) का उपयोग कर रहे होते हैं। आप अभी भी इन विशेषताओं का उपयोग अपने बाद के सत्यापन में बांधने के लिए कर सकते हैं, जिसने मेरे लिए काम किया है। यह आपको मार्कअप (i18n, आदि) बनाम जेएस के माध्यम से सीमा को नियंत्रित करने की अनुमति देता है।
एम वूरी

1

मुझे पता है कि पहले से ही एक उत्तर है, लेकिन यदि आप चाहते हैं कि आपका इनपुट बिल्कुल maxlengthविशेषता की तरह व्यवहार करे या जितना संभव हो उतना निकट हो, तो निम्न कोड का उपयोग करें:

(function($) {
 methods = {
    /*
     * addMax will take the applied element and add a javascript behavior
     * that will set the max length
     */
    addMax: function() {
        // set variables
        var
            maxlAttr = $(this).attr("maxlength"),
            maxAttR = $(this).attr("max"),
            x = 0,
            max = "";

        // If the element has maxlength apply the code.
        if (typeof maxlAttr !== typeof undefined && maxlAttr !== false) {

            // create a max equivelant
            if (typeof maxlAttr !== typeof undefined && maxlAttr !== false){
                while (x < maxlAttr) {
                    max += "9";
                    x++;
                }
              maxAttR = max;
            }

            // Permissible Keys that can be used while the input has reached maxlength
            var keys = [
                8, // backspace
                9, // tab
                13, // enter
                46, // delete
                37, 39, 38, 40 // arrow keys<^>v
            ]

            // Apply changes to element
            $(this)
                .attr("max", maxAttR) //add existing max or new max
                .keydown(function(event) {
                    // restrict key press on length reached unless key being used is in keys array or there is highlighted text
                    if ($(this).val().length == maxlAttr && $.inArray(event.which, keys) == -1 && methods.isTextSelected() == false) return false;
                });;
        }
    },
    /*
     * isTextSelected returns true if there is a selection on the page. 
     * This is so that if the user selects text and then presses a number
     * it will behave as normal by replacing the selection with the value
     * of the key pressed.
     */
    isTextSelected: function() {
       // set text variable
        text = "";
        if (window.getSelection) {
            text = window.getSelection().toString();
        } else if (document.selection && document.selection.type != "Control") {
            text = document.selection.createRange().text;
        }
        return (text.length > 0);
    }
};

$.maxlengthNumber = function(){
     // Get all number inputs that have maxlength
     methods.addMax.call($("input[type=number]"));
 }

})($)

// Apply it:
$.maxlengthNumber();

मुझे यह पसंद है, इसे अपने स्वयं के उपयोग के लिए थोड़ा मोड़ दिया, (मैं नहीं चाहता था कि लोग क्रोम में "ई" टाइप करें, जिसकी अनुमति है);
मैथिज्स सीजर

1

Chrome (तकनीकी रूप से, ब्लिंक) अधिकतम गति को लागू नहीं करेगा<input type="number">

HTML5 विनिर्देश कहता है कि अधिकतम गति केवल पाठ, url, ई-मेल, खोज, टेली और पासवर्ड के प्रकारों पर लागू होती है।


जो कुछ भी पहले उल्लेख नहीं किया गया है, उसके लिए कुछ भी उपयोगी नहीं है
कैंडिडेट

1

मैं हाल ही में कोशिश की है कि पूर्ण समाधान है:

<input class="class-name" placeholder="1234567" name="elementname"  type="text" maxlength="4" onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57" />

क्योंकि यह जेनेरिक जेएस है, यह हर जगह काम करेगा। मैं एंगुलर 5 का उपयोग कर एक प्रोजेक्ट पर काम कर रहा हूं और यह एक आकर्षण की तरह काम करता है। आप शायद अपने कोणीय कोड में एक सेवा बनाने में 10 मिनट बिता सकते हैं ताकि आप इसे अपने पूरे प्रोजेक्ट में पुनः उपयोग कर सकें।
श्री बेनेडिक्ट

0

मैं इसे त्वरित और समझने में आसान बनाऊंगा!

के लिए type='number'अधिकतम गति के बजाय (अधिकतम तरंग का मतलब एक textप्रकार में एक स्ट्रिंग के लिए अधिकतम अक्षरों को परिभाषित करना है ), उपयोग min=''और max=''

चियर्स


0

<input type="number"> बस यह है ... एक संख्या इनपुट (यद्यपि, एक स्ट्रिंग से अनजाने में जावास्क्रिप्ट के माध्यम से तैरने के लिए)।

मेरा अनुमान है, यह कुंजी इनपुट पर वर्णों को प्रतिबंधित नहीं करता है maxLengthया अन्यथा आपका उपयोगकर्ता "कुंजी जाल" में फंस सकता है यदि वे शुरुआत में एक दशमलव भूल गए थे ( जब एक "maxLength" attr पहले ही पहुंच चुका हो तो .सूचकांक डालने की कोशिश करें) )। यदि आप एक विशेषता सेट करते हैं तो यह फॉर्म सबमिट पर मान्य होगा ।1<input type"text">max

यदि आप किसी फ़ोन नंबर को प्रतिबंधित / मान्य करने का प्रयास कर रहे हैं, तो type="tel"attr / value का उपयोग करें । यह maxLengthattr का पालन करता है और केवल (आधुनिक ब्राउज़रों में) मोबाइल नंबर कीबोर्ड लाता है और आप इनपुट को एक पैटर्न (यानी pattern="[0-9]{10}") तक सीमित कर सकते हैं ।


0

प्रतिक्रिया उपयोगकर्ताओं के लिए,

बस अपनी अधिकतम लंबाई आवश्यकता के साथ 10 को बदलें

 <input type="number" onInput={(e) => e.target.value = e.target.value.slice(0, 10)}/>

-1

maxlenght - इनपुट प्रकार पाठ

<input type="email" name="email" maxlength="50">

jQuery का उपयोग:

$("input").attr("maxlength", 50)

maxlenght - इनपुट प्रकार संख्या

जे एस

function limit(element, max) {    
    var max_chars = max;
    if(element.value.length > max_chars) {
        element.value = element.value.substr(0, max_chars);
    } 
}

एचटीएमएल

<input type="number" name="telefono" onkeydown="limit(this, 20);" onkeyup="limit(this, 20);">
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.