it-swarm.com.de

Wie kann ich mögliche Eingaben in einem HTML5-Element "number" begrenzen?

Für das <input type="number">-Element funktioniert maxlength nicht. Wie kann ich die maxlength für dieses Zahlenelement einschränken?

290
Prasad

Sie können ein max-Attribut hinzufügen, das die höchstmögliche Anzahl angibt, die Sie einfügen können

<input type="number" max="999" />

wenn Sie einen max- und einen min-Wert hinzufügen, können Sie den Bereich der zulässigen Werte angeben:

<input type="number" min="1" max="999" />

Das obige wird immer noch not verhindern, dass ein Benutzer einen Wert außerhalb des angegebenen Bereichs manuell eingibt. Stattdessen wird ein Popup angezeigt, in dem er aufgefordert wird, beim Senden des Formulars einen Wert innerhalb dieses Bereichs einzugeben.

 enter image description here

278
Cyclonecode

Sie können die Attribute min und max angeben, die die Eingabe nur innerhalb eines bestimmten Bereichs zulassen.

<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">

Dies funktioniert jedoch nur für die Drehknopf-Steuertasten. Obwohl der Benutzer möglicherweise eine Zahl eingeben kann, die größer als die zulässige max ist, wird das Formular nicht gesendet. 

Chrome's validation message for numbers greater than the max
Screenshot aus Chrome 15

Sie can verwenden das HTML5-Ereignis oninput in JavaScript, um die Anzahl der Zeichen zu begrenzen:

myInput.oninput = function () {
    if (this.value.length > 4) {
        this.value = this.value.slice(0,4); 
    }
}
92
Andy E

Wenn Sie nach einer Mobile Web - Lösung suchen, in der Ihr Benutzer einen Nummernblock anstelle einer Volltext-Tastatur sehen soll. Verwenden Sie type = "tel". Es funktioniert mit maxlength, was Ihnen die Erstellung von zusätzlichem Javascript erspart.

Mit Max und Min kann der Benutzer immer noch Zahlen eingeben, die über Max und Min hinausgehen, was nicht optimal ist.

74
Duane

Sie können all dies wie folgt kombinieren:

<input name="myinput_drs"
oninput="maxLengthCheck(this)"
type = "number"
maxlength = "3"
min = "1"
max = "999" />

<script>
  // This is an old version, for a more recent version look at
  // https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
  function maxLengthCheck(object)
  {
    if (object.value.length > object.maxLength)
      object.value = object.value.slice(0, object.maxLength)
  }
</script>


Update:
Möglicherweise möchten Sie auch verhindern, dass nicht numerische Zeichen eingegeben werden, da object.length eine leere Zeichenfolge für die Zahleneingaben wäre und die Länge daher 0 lautet. Daher funktioniert die Funktion maxLengthCheck nicht.

Lösung:
Siehe dies oder das für Beispiele.

Demo - Die vollständige Version des Codes finden Sie hier:
http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/

Update 2: Hier ist der Update-Code: https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/

Update 3: Bitte beachten Sie, dass die Eingabe von mehr als einem Dezimalpunkt den Zahlenwert beeinträchtigen kann.

60
David Refoua

es ist sehr einfach, mit etwas Javascript können Sie eine maxlength simulieren.

//maxlength="2"
<input type="number" onKeyDown="if(this.value.length==2) return false;" />
20
Maycow Moura

Wenn Ihr Maximalwert beispielsweise 99 und ein Minimum von 0 ist, können Sie dies dem Eingabeelement hinzufügen (Ihr Wert wird durch Ihren Maximalwert neu geschrieben usw.).

<input type="number" min="0" max="99" 
   onKeyUp="if(this.value>99){this.value='99';}else if(this.value<0){this.value='0';}"
id="yourid">

Dann (wenn Sie möchten), können Sie überprüfen, ob die Zahl wirklich eingegeben wird

15
Richard

Sie können es als Text angeben, aber Pettern hinzufügen, das nur mit Zahlen übereinstimmt:

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

Es funktioniert perfekt und auch auf dem Handy (getestet auf iOS 8 und Android) erscheint die Zahlentastatur.

//For Angular I have attached following snippet.
<div ng-app="">
  <form>
    Enter number: <input type="number" ng-model="number" onKeyPress="if(this.value.length==7) return false;" min="0">
  </form>
  <h1>You entered: {{number}}</h1>
</div>

Wenn Sie das "onkeypress" -Ereignis verwenden, werden Sie während der Entwicklung keine Benutzereinschränkungen als solche erhalten (Komponententest). Und wenn Sie eine Anforderung haben, die es dem Benutzer nicht erlaubt, nach einem bestimmten Grenzwert einzugeben, schauen Sie sich diesen Code an und versuchen Sie es einmal.

10
Prasad Shinde

Wie von anderen angegeben, ist min/max nicht gleich maxlength, da Personen trotzdem einen Float eingeben können, der größer ist als die von Ihnen beabsichtigte maximale Stringlänge. Um das Maxlength-Attribut wirklich zu emulieren, können Sie etwas wie folgt tun (dies entspricht maxlength = "16"):

<input type="number" oninput="if(value.length>16)value=value.slice(0,16)">
6
thdoan

Die maximale Länge funktioniert nicht mit <input type="number". Die beste Methode, die ich kenne, ist die Verwendung von oninput, um die maximale Länge zu begrenzen. Bitte beachten Sie den Code unten für eine einfache Implementierung.

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

Die Antwort von Maycow Moura war ein guter Anfang ... Allerdings bedeutet seine Lösung, dass mit der Eingabe der zweiten Ziffer die Bearbeitung des Feldes beendet wird. Sie können also keine Werte ändern oder Zeichen löschen.

Der folgende Code endet bei 2, erlaubt jedoch die Bearbeitung.

//MaxLength 2
onKeyDown="if(this.value.length==2) this.value = this.value.slice(0, - 1);"
6
Tim Wright

Eine weitere Option ist, einfach einen Listener für alles mit dem Attribut maxlength hinzuzufügen und den Slice-Wert hinzuzufügen. Angenommen, der Benutzer möchte keine Funktion in jedem Ereignis verwenden, das sich auf die Eingabe bezieht. Hier ist ein Codeausschnitt. Ignorieren Sie den CSS- und HTML-Code. Das wichtigste ist JavaScript.

// Reusable Function to Enforce MaxLength
function enforce_maxlength(event) {
  var t = event.target;
  if (t.hasAttribute('maxlength')) {
    t.value = t.value.slice(0, t.getAttribute('maxlength'));
  }
}

// Global Listener for anything with an maxlength attribute.
// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
label { margin: 10px; font-size: 16px; display: block }
input { margin: 0 10px 10px; padding: 5px; font-size: 24px; width: 100px }
span { margin: 0 10px 10px; display: block; font-size: 12px; color: #666 }
<label for="test_input">Text Input</label>
<input id="test_input" type="text" maxlength="5"/>
<span>set to 5 maxlength</span>

<br>

<label for="test_input">Number Input</label>
<input id="test_input" type="number" min="0" max="99" maxlength="2"/>
<span>set to 2 maxlength, min 0 and max 99</span>

6
Brandon Buttars

Ich hatte dieses Problem schon einmal und habe es mit einer Kombination aus html5 number type und jQuery gelöst.

<input maxlength="2" min="0" max="59" name="minutes" value="0" type="number"/>

skript:

$("input[name='minutes']").on('keyup keypress blur change', function(e) {
    //return false if not 0-9
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
       return false;
    }else{
        //limit length but allow backspace so that you can still delete the numbers.
        if( $(this).val().length >= parseInt($(this).attr('maxlength')) && (e.which != 8 && e.which != 0)){
            return false;
        }
    }
});

Ich weiß nicht, ob die Ereignisse ein bisschen übertrieben sind, aber mein Problem wurde gelöst . JSfiddle

5
tiltdown

Sie können dies auch für die numerische Eingabe mit Längenbeschränkung versuchen

<input type="tel" maxlength="3" />
3
shinobi

maxlength für die Eingabe von Zahlen kann auf einfache Weise eingestellt werden:

<input type="number" onkeypress="if(this.value.length>=4) { return false;}" oninput="if(this.value.length>=4) { this.value = this.value.slice(0,4); }" />
3
HexboY

Wie bei type="number" geben Sie eine max anstelle der maxlength-Eigenschaft an. Dies ist die maximal mögliche Anzahl. Bei 4 Stellen sollte max9999 sein, 5 Stellen 99999 und so weiter.

Wenn Sie sicherstellen möchten, dass es sich um eine positive Zahl handelt, können Sie min="0" setzen, um positive Zahlen sicherzustellen.

3
Jan Dragsbaek

HTML-Eingabe

 <input class="minutesInput" type="number" min="10" max="120" value="" />

jQuery

 $(".minutesInput").on('keyup keypress blur change', function(e) {

    if($(this).val() > 120){
      $(this).val('120');
      return false;
    }

  });
2
Hector

Wie ich herausgefunden habe, können Sie keine der onkeydown-, onkeypress- oder onkeyup-Ereignisse für eine vollständige Lösung einschließlich mobiler Browser verwenden. Übrigens ist onkeypress veraltet und in chrome/opera für Android nicht mehr vorhanden (siehe: UI Events W3C Working Draft, 04. August 2016 ).

Ich habe eine Lösung gefunden, die nur das oninput -Ereignis verwendet. Sie müssen ggf. zusätzliche Nummern prüfen, z. B. negatives/positives Vorzeichen oder Dezimal- und Tausendertrennzeichen und dergleichen, aber als Start sollte Folgendes ausreichen:

function checkMaxLength(event) {
	// Prepare to restore the previous value.
	if (this.oldValue === undefined) {
		this.oldValue = this.defaultValue;
	}

	if (this.value.length > this.maxLength) {
		// Set back to the previous value.
		this.value = oldVal;
	}
	else {
		// Store the previous value.
		this.oldValue = this.value;
		
		// Make additional checks for +/- or ./, etc.
		// Also consider to combine 'maxlength'
		// with 'min' and 'max' to prevent wrong submits.
	}
}

Ich würde auch empfehlen, maxlength mit min und max zu kombinieren, um falsche Einreichungen wie oben angegeben mehrmals zu verhindern.

1
markus s

Pfui. Es ist, als hätte jemand die Hälfte der Implementierung aufgegeben und gedacht, niemand würde es merken.

Aus irgendeinem Grund verwenden die obigen Antworten nicht die Attribute min und max. Diese jQuery beendet es:

    $('input[type="number"]').on('input change keyup paste', function () {
      if (this.min) this.value = Math.max(parseInt(this.min), parseInt(this.value));
      if (this.max) this.value = Math.min(parseInt(this.max), parseInt(this.value));
    });

Es würde wahrscheinlich auch als benannte Funktion "oninput" ohne jQuery funktionieren, wenn Sie einen dieser "jQuery-is-the-Devil" -Typen haben.

1
Michael Cole

Ich weiß, dass es bereits eine Antwort gibt, aber wenn Sie möchten, dass sich Ihre Eingabe genau wie das maxlength-Attribut verhält oder so nahe wie möglich, verwenden Sie folgenden Code:

(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
Philll_t
<input type="number" onchange="this.value=Math.max(Math.min(this.value, 100), -100);" />

oder wenn du nichts eingeben kannst

<input type="number" onchange="this.value=this.value ? Math.max(Math.min(this.value,100),-100) : null" />
1
j4r3k

Schreib einfach das ...

<input type="text" onkeypress="return event.target.value.length < 13"  placeholder="Enter Identity card number" class="form-control">
0
Nouman Mukhtar

Wer sucht nach einer globalen Einschränkung wie ich:

$(document).on('keypress','input[type="number"][maxlength]', function(){
    return this.value.length < +this.attributes.maxlength.value;
});

Dadurch wird jeder Tastendruck im Dokument erfasst und gefiltert, wenn die Eingabe eine Zahl ist und ein maxlength-Attribut enthält. Lässt dann die gedrückte Taste zu, wenn die Länge nicht die maximale Länge erreicht hat. Es funktioniert auch mit dynamisch hinzugefügten Eingängen und Modalen usw.

0
Taha Paksu

Weitere relevante Attribute sind min und max.

0
Marcel