ক্রোমে ইনপুট টাইপ = "সংখ্যা" এর জন্য সর্বোচ্চ দৈর্ঘ্য উপেক্ষা করা হয়েছে


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বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন (এনবি: এটি কেবলমাত্র একটি সীমাবদ্ধ সীমার সংজ্ঞা দেবে, মানটির প্রকৃত চরিত্রের দৈর্ঘ্য নয়, যদিও -৯৯৯৯ থেকে ৯৯৯৯ পর্যন্ত সমস্ত ০-৪ হবে অঙ্ক সংখ্যা), বা আপনি একটি নিয়মিত পাঠ্য ইনপুট ব্যবহার করতে পারেন এবং নতুন বৈশিষ্ট্য সহ ক্ষেত্রটিতে বৈধতা প্রয়োগ করতে পারেন :pattern

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

13
type="number"এটি এইচটিএমএল 5 স্পেসিফিকেশন থেকে একটি নতুন টাইপ নোট করুন । আপনি যে ব্রাউজারে পরীক্ষা করছি শনাক্ত না করলে type="number"এটা বিবেচনা করবে যেমন type="text"যা করে সম্মান maxlengthঅ্যাট্রিবিউট। এটি আপনার দেখা আচরণের ব্যাখ্যা দিতে পারে।
আন্দ্রে ডিওন

8
@ ফ্রিকোয়েন্সি, আপনি এখানে ঠিক নেই, কারণ আপনি "কীবোর্ড ইনপুট" এর দৈহিক দৈর্ঘ্যকে বৈশিষ্ট্য type=numberনির্ধারণ করে ইনপুটটিতে সীমাবদ্ধ করতে পারবেন না max। এই বৈশিষ্ট্যটি কেবল ইনপুটটির স্পিনার দ্বারা নির্বাচিত সংখ্যাকে সীমাবদ্ধ করে।
কামিলিয়াস

5
\d*এখানে কি ?
পারদীপ জৈন

4
প্যাটার্ন = "\ d *" আইই 11 বা ফায়ারফক্স 56 এ কাজ করে না j jsfiddle.net/yyvrz84v
রিডো

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"
 />

উজ্জ্বল। ধন্যবাদ!
টায় থিলেপটিপ করুন

@ গিগুডেস সংস্করণ সমস্ত পরীক্ষিত ডিভাইসগুলিতে "নম্বর" টাইপ করে আমার জন্য কাজ করে। তবে আমি প্রকাশের দ্বিতীয় অংশটি সম্পূর্ণরূপে বুঝতে পারি না||0/1
বার্লেবি

34
@Barleby। কেবল oninput="this.value=this.value.slice(0,this.maxLength)"কাজ করা উচিত
ওয়াশিংটন গুডেস

1
@ WashingtonGuedes কোডের উপর আমার জন্য কাজ উপরে <input type="number"> stackoverflow.com/questions/18510845/...
ডেভিড Yeiser

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;" />



4
আমি চেষ্টা করেছি, 4 টি সংখ্যার প্রবেশের পরে, পাঠ্যবাক্সটি কোনও আপডেটের জন্য কোনও জায়গা ছাড়াই হিমশীতল হয়ে যায়, মুছে ফেলবে না ব্যাকস্পেস কীগুলি কোনও কাজ করে না, কোনও কাজ করে না, কীভাবে কোনও অঙ্ক সম্পাদনা করতে হয়, দয়া করে উল্লেখ করুন।
আব্বাস

1
আমি আপনার স্নিপেটে প্রবেশ করতে সক্ষম হয়েছি (1.2.3.4.5.5.6.76.7)
আলা '

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। নম্বর ক্ষেত্রটি রাখার খুব চালাক উপায়। কেবলমাত্র একটি মিনিট / সর্বোচ্চ বৈশিষ্ট্য যুক্ত করা নিশ্চিত করুন কারণ স্পিন বোতামগুলি যদি ব্যবহার করা হয় তবে 4 ডিজিটের উপরে যেতে পারে
নিলালমিচ 14

3
আপনি 9999 টাইপ করার সময় কাজ করে না এবং ইনপুটটিতে আপ বোতাম টিপুন।
সিসাবা জারগলি

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

হ্যাঁ, আমি লক্ষ্য করেছি একটি সংখ্যা ইনপুট ফেরত দেয় না value.length, যাহাই হউক না কেন, আমি এটা ব্যাকস্পেস keycode সহ সম্পাদিত
Maycow Moura,

2
অ্যারে কী এবং মুছুন (ফরোয়ার্ড) বোতামটিও অন্তর্ভুক্ত করা উচিত।
vtni

এটি একটি দুর্দান্ত। এবং এটি কেবল আমার জন্যই কাজ করছে..উপটেড
সেলিম আহমাদ

1
দুর্দান্ত উত্তর, টিএনএক্স। তবে আমি এক্ষেত্রে 'নম্বর' এর পরিবর্তে 'টেলি' ব্যবহারের কারণ পাই না। তবুও আপনি "ইভেন্ট.কিকোড! = 8" এর সাথে "ইভেন্ট.কি কোড> 47 && ইভেন্ট.keyCode <58" শর্তটি পরিবর্তিত করতে পারেন কেবলমাত্র অঙ্কগুলিতে প্রবেশ করা থেকে ব্যবহারকারীকে অক্ষম করতে প্রাকৃতিক সংখ্যাগুলির ক্ষেত্রে।
ডুডি

28

আপনি সর্বনিম্ন এবং সর্বাধিক বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন ।

নিম্নলিখিত কোডগুলি একই কাজ করে:

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

2
আমি বলব এটি এখানে সঠিক উত্তর হওয়া উচিত। ক্রম কমপক্ষে মিনিট / সর্বাধিক পরামিতিগুলির উপর ভিত্তি করে বাক্সটিকে সংবেদনশীলভাবে আকার দেয়।
ফুকোয়েন্সি

70
আপনি দৈর্ঘ্যের সীমাবদ্ধতাটি যুক্ত করতে চাইলে এটি কাজ করে না, আপনি যখন 9999ব্যবহারকারী দৈর্ঘ্যটি অতিক্রম করে ম্যানুয়ালি কোনও সংখ্যায় টাইপ করতে পারেন তার সংখ্যাটি অতিক্রম করতে পারবেন না ।
ফিল্ল_ট

10

আপনার ইনপুট প্রকারকে পাঠ্যে পরিবর্তন করুন এবং ফাংশন কল করতে "অনিনপুট" ইভেন্টটি ব্যবহার করুন:

<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 ব্যবহার করে আমার অ্যান্ড্রয়েডে ব্যর্থ বলে মনে হচ্ছে
Deebs

1
এক খুব ছোটখাট গেলিক ভাষার, পরিবর্তন করতে "এই", numberOnly (ID) numberOnly (মৌলিক পদার্থ), তারপর আপনি numberOnly প্রথম লাইন প্রয়োজন হবে না এবং এটি একটি আইডি ছাড়া কাজ করে "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ইনপুটটি স্বয়ংক্রিয়ভাবে বৈধ হয়ে যাবে এবং কিছু অদ্ভুত ক্ষেত্রে নেতৃস্থানীয় 0গুলি পরিবর্তিত হবে 1
ফিল্ল_ট


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);
});

আমি আশা করি এটি কাউকে সাহায্য করবে


আমারও একই ধারণা ছিল (যদিও আমি "ইনপুট" ইভেন্টটি ব্যবহার করেছি) তবে আমি মনে করি @ ওয়াশিংটনগুয়েডস অন্য উত্তরের মন্তব্যে যে সমাধানটি লিখেছেন তা অনেক সহজ: this.value = this.value.slice(0, this.maxLength);আপনি কি মনে করেন এর কোনও সমস্যা আছে? আমি এখনও পর্যন্ত কোন খুঁজে পাইনি। এটি আটকানো পাঠ্যও কভার করে।
ননজাপ্রেজ

আমি দীর্ঘ পথ পছন্দ করি। RegExp এর ব্যবহার অত্যন্ত নমনীয়।
harley81

2

আমার অভিজ্ঞতায় বেশিরভাগ সমস্যা যেখানে লোকেরা জিজ্ঞাসা করছে কেন maxlengthতাকে উপেক্ষা করা হয় কারণ ব্যবহারকারীকে "অনুমোদিত" অক্ষরের চেয়ে বেশি ইনপুট দেওয়ার অনুমতি দেওয়া হয়।

যেমন অন্যান্য মতামত জানিয়েছে, type="number"ইনপুটগুলির একটি maxlengthবৈশিষ্ট্য নেই এবং পরিবর্তে এর একটি minএবং maxবৈশিষ্ট্য রয়েছে।

ফর্মটি জমা দেওয়ার আগে ব্যবহারকারীকে এটি সম্পর্কে অবহিত করার সময় ক্ষেত্রটি সন্নিবেশ করা যেতে পারে এমন সীমা সীমাবদ্ধ করার জন্য (ব্রাউজারটি অন্যথায় মানটি সর্বাধিক> সর্বোচ্চ চিহ্নিত করা উচিত) করতে হবে, আপনাকে (আপাতত, কমপক্ষে) একটি যুক্ত করতে হবে মাঠে শ্রোতা।

আমি অতীতে একটি সমাধান এখানে ব্যবহার করেছি: http://codepen.io/wuori/pen/LNyYBM


মিনিট এবং সর্বাধিক এখানে অনর্থক হিসাবে ভাল, তারা ইনপুট ক্ষেত্রে একটি অনির্দিষ্ট পরিমাণ টাইপ করতে ব্যবহারকারীকে বাধা দেয় না।
andreszs

সত্য। আপনি যখন তীরচিহ্নগুলি বা উপরে / ডাউন নিয়ামকগুলি (ক্রোম ইত্যাদিতে) ব্যবহার করেন কেবল তখনই তাদের এ্যাকশনটিতে দেখেন। আপনি এখনও এই বৈশিষ্ট্যগুলি আপনার পরবর্তী বৈধতার সাথে যুক্ত করতে ব্যবহার করতে পারেন, যা আমার পক্ষে কাজ করেছে। এটি আপনাকে মার্কআপ (আই 18 এন ইত্যাদি) বনাম জেএস এর মাধ্যমে সীমাবদ্ধতা নিয়ন্ত্রণ করতে দেয় allows
এম উয়ুরি

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

ক্রোম (প্রযুক্তিগতভাবে, ব্লিঙ্ক) এর জন্য সর্বোচ্চ দৈর্ঘ্য প্রয়োগ করবে না<input type="number">

এইচটিএমএল 5 স্পেসিফিকেশন বলছে যে সর্বোচ্চতা কেবলমাত্র পাঠ্য, ইউআরএল, ই-মেইল, অনুসন্ধান, টেলিফোন এবং পাসওয়ার্ডের ক্ষেত্রে প্রযোজ্য।


যা আগে উল্লিখিত হয়নি তার সাথে দরকারী কোনও কিছু যুক্ত করে না
CandidJ

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অন্যথায় আপনার ব্যবহারকারী শুরুতে দশমিকটি ভুলে গেলে কোনও "কী ফাঁদে" আটকে থাকতে পারে ( যখন "ম্যাক্সেলেন্থ" এট্রে পৌঁছে গিয়েছে তখন .সূচক এনে চেষ্টা করুন) )। তবে আপনি যদি কোনও অ্যাট্রিবিউট সেট করেন তবে এটি ফর্ম জমা দেওয়ার ক্ষেত্রে বৈধ হবে ।1<input type"text">max

আপনি যদি কোনও ফোন নম্বর সীমাবদ্ধ / বৈধ করার চেষ্টা করছেন তবে type="tel"অ্যাটর / মানটি ব্যবহার করুন । এটি maxLengthঅ্যাটরকে মান্য করে এবং কেবলমাত্র মোবাইল নম্বর কীবোর্ড নিয়ে আসে (আধুনিক ব্রাউজারগুলিতে) এবং আপনি কোনও প্যাটার্নে (যেমন pattern="[0-9]{10}") ইনপুট সীমাবদ্ধ করতে পারেন ।


0

প্রতিক্রিয়া ব্যবহারকারীদের জন্য,

আপনার সর্বোচ্চ দৈর্ঘ্যের প্রয়োজনীয়তার সাথে 10 প্রতিস্থাপন করুন

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

-1

ম্যাক্সলিংহ্ট - ইনপুট ধরণের পাঠ্য

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

jQuery ব্যবহার:

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

সর্বোচ্চ - ইনপুট ধরণের সংখ্যা

জাতীয়

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);">
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.