Der Eingabetyp "Nummer" wird nicht in der Größe geändert

79

Warum wird die Größe meiner Eingabe nicht geändert, wenn ich den Typ in ändere, type="number"aber es funktioniert mit type="text"?

BEISPIEL

    Email: <input type="text" name="email" size="10"><br/>
  number: <input type="number" name="email" size="10">
SaturnsEye
quelle

Antworten:

79

Anscheinend unterstützt der inputTyp numberkein sizeAttribut oder ist nicht mit Browsern kompatibel. Sie können ihn stattdessen über CSS festlegen:

input[type=number]{
    width: 80px;
} 

Geige aktualisiert

Felix
quelle
Ausgezeichnet! das macht den Job. Auch eine andere Kleinigkeit, die ich gerade bemerkt habe. Der Nummerntyp erlaubt auch keine maximale Anzahl von Nummern, wo wie der Text. Gibt es eine Möglichkeit, das auch zu beheben?
SaturnsEye
Es unterstützt es, Sie können alle unterstützten Werte hier sehen: w3.org/TR/html-markup/input.number.html
Felix
Ich habe maxlength="4"und es wird nicht wirksam, wo es ist wietext
SaturnsEye
4
Oh, das maxlengthwird nicht unterstützt, nur das maxAttribut.
Felix
5
Wenn Sie auf bestimmte Größen abzielen möchten, verwenden Sie: input[type=number][size="3"]{ width: 3em; }usw.
Nick
52

Falsche Verwendung.

Geben Sie die Nummer des Eingabetyps so ein, dass der Wert über die Pfeile nach oben und unten ausgewählt werden kann.

Sie suchen also im Grunde nach einem CSS-Stil mit "Breite".

Eingabetext wird historisch mit monospaced Schriftart formatiert, daher ist Größe auch die Breite, die es benötigt.

Die Eingabenummer ist neu und die Eigenschaft "Größe" hat überhaupt keinen Sinn *. Eine typische Verwendung:

<input type="number" name="quantity" min="1" max="5">

w3c docs

Fügen Sie zum Korrigieren einen Stil hinzu:

<input type="number" name="email" style="width: 7em">

BEARBEITEN: Wenn Sie einen Bereich möchten, müssen Sie festlegen type="range"und nicht="number"

EDIT2: * Größe ist kein zulässiger Wert (also kein Sinn). Lesen Sie die offiziellen W3C-Spezifikationen

Hinweis: Das Größenattribut funktioniert mit den folgenden Eingabetypen: Text, Suche, Telefon, URL, E-Mail und Kennwort.

Tipp: Verwenden Sie das Attribut maxlength, um die maximal zulässige Anzahl von Zeichen im Element anzugeben.

MrPk
quelle
4
Zu sagen, dass die Größe in Zahleneingaben "überhaupt keine Verwendung hat", ist eine Strecke. Wenn Sie eine Zahleneingabe mit üblichen Werten zwischen 2 und 4 haben (was sehr häufig vorkommt), haben Sie keine Möglichkeit, die Standardgröße zu steuern, und das Ganze ist riesig. Eingaben werden anscheinend nie geliebt ... Die "Lösung" besteht also nur darin, Text zu verwenden, obwohl Sie wirklich nur Zahlen wollen. Nicht jedes Seitendesign basiert darauf, dass alle Eingaben eine große Breite haben, und die Angabe der Breite aller Zahleneingaben ist eine Regression.
Vierzig
1
Und genau dafür ist das Größenattribut gedacht. Es macht einen viel besseren Job, als alle Eingaben mit Klassen und Ihr gesamtes CSS mit Dutzenden von Größen zu füllen und gleichzeitig die verschiedenen Eingabedifferenzen über Browser zu berechnen :) (und nein, der Bereich hat nichts zu tun mach damit)
Vierzig
2
Der Punkt ist, es war dumm, Größe zu entfernen, es war nicht, weil "es keinen Nutzen hat".
Vierzig
2
Ich bin mir bewusst. Mein Kommentar hatte die Absicht zu verdeutlichen, dass das, was Sie in Ihre Antwort aufgenommen haben, falsch ist.
Vierzig
1
Fantastische Lösung, style='width:80'vielen Dank
Fattie
17

Anstatt die Länge festzulegen, legen Sie die Max- und Min-Werte für die Zahleneingabe fest.

Das Eingabefeld wird dann an den längsten gültigen Wert angepasst.

Wenn Sie eine dreistellige Nummer zulassen möchten, stellen Sie 999 als max

 <input type="number" name="quantity" min="0" max="999">
Michael
quelle
Dies war die einzige Methode, mit der ich für mobiles Chrome unter Android arbeiten konnte.
Ranvel
5

Für <input type=number>die HTML5-CR ist das sizeAttribut nicht zulässig. In veralteten Funktionen heißt es jedoch: „Autoren sollten die Attribute maxlength und size für Eingabeelemente, deren Typattribute sich im Status Number befinden, nicht angeben, können dies jedoch trotz gegenteiliger Anforderungen an anderer Stelle in dieser Spezifikation angeben. Ein gültiger Grund für die Verwendung dieser Attribute ist, dass ältere Benutzeragenten, die keine Eingabeelemente mit type = "number" unterstützen, das Textfeld weiterhin mit einer nützlichen Breite rendern können.

Somit kann das sizeAttribut verwendet werden, es betrifft jedoch nur ältere Browser, die dies nicht unterstützen type=number, so dass das Element auf ein einfaches Textsteuerelement zurückgreift <input type=text>.

Der Grund dafür ist, dass vom Browser erwartet wird, dass er eine Benutzeroberfläche bereitstellt, die die anderen Attribute für eine gute Benutzerfreundlichkeit berücksichtigt. Da die Implementierungen variieren können, kann jede von einem Autor auferlegte Größe die Dinge durcheinander bringen. (Dies gilt auch für das Festlegen der Breite des Steuerelements in CSS.)

Die Schlussfolgerung ist, dass Sie <input type=number>in einem mehr oder weniger flüssigen Setup verwenden sollten, das keine Annahmen über die Abmessungen des Elements macht.

Jukka K. Korpela
quelle
0

Was du willst ist maxlength.

Gültig für text, search, url, tel, email, und passworddefiniert sie die maximale Anzahl von Zeichen (als UTF-16 Code - Einheiten) der Benutzer in das Feld eingeben. Dies muss ein ganzzahliger Wert von 0 oder höher sein. Wenn keine maximale Länge oder ein ungültiger Wert angegeben ist, hat das Feld keine maximale Länge. Dieser Wert muss auch größer oder gleich dem Wert der Minenlänge sein.

Sie könnten einen dieser inputTypen in Betracht ziehen .

Andrew
quelle
-1

Verwenden Sie ein Ereignis on onkeypress. Beispiel für eine Postleitzahlbox. Es erlaubt maximal 5 Zeichen und überprüft, ob die Eingabe nur aus Zahlen besteht.

Natürlich geht nichts über eine serverseitige Validierung, aber dies ist ein guter Weg.

function validInput(e) {
  e = (e) ? e : window.event;
  a = document.getElementById('zip-code');
  cPress = (e.which) ? e.which : e.keyCode;

  if (cPress > 31 && (cPress < 48 || cPress > 57)) {
    return false;
  } else if (a.value.length >= 5) {
    return false;
  }

  return true;
}
#zip-code {
  overflow: hidden;
  width: 60px;
}
<label for="zip-code">Zip Code:</label>
<input type="number" id="zip-code" name="zip-code" onkeypress="return validInput(event);" required="required">

Michael
quelle
-1

Ändern Sie type = "number" in type = "tel".

user1882196
quelle