2009-09-05 4 views
9

Ich habe ein Eingabefeld, das Werte von 0-100 nimmt. Ich möchte verhindern, dass Benutzer etwas Größeres oder Kleineres schreiben.Begrenzen Eingabefeld auf 0-100

Ich habe mit dem jQuery-Plugin keyfilter die Eingabe eines Feldes zu begrenzen: http://code.google.com/p/jquery-keyfilter/

Dieses Plugin die Eingabe in Ziffern begrenzen, aber nicht innerhalb eines Bereichs. Wie verhindere ich, dass Benutzer Zahlen eingeben, die den Bereich überschreiten? Vielen Dank.

Antwort

31

Verwenden Ebene Javascript wie folgt aus:

<script> 
    function handleChange(input) { 
    if (input.value < 0) input.value = 0; 
    if (input.value > 100) input.value = 100; 
    } 
</script> 

dann das Eingabefeld wie folgt erklären:

<input type="text" onchange="handleChange(this);" /> 

Weil Sie diese Funktion angeschlossen haben onChange(), wird es funktionieren, selbst wenn ein Benutzer Kopieren/Einfügen von etwas in das Eingabefeld.

+0

Vielen Dank. Wie würde ich das Ereignis so binden, dass es nicht inline ist? – Jourkey

+8

-1 \t Das Erzwingen akzeptabler Werte ist ein schreckliches Interface-Design. Ein unaufmerksamer Benutzer könnte auf diese Weise leicht unbeabsichtigte Daten eingeben. Sie sollten die Daten als ungültig kennzeichnen und dem Benutzer die Anpassung überlassen. Vielleicht haben sie gerade in die falsche Box getippt und der Wert gehört wirklich woanders hin, wo es gültig wäre. – tvanfosson

+0

Ich sehe definitiv Ihren Standpunkt. Aber ist das nicht genau das, was ein Slider macht? Wenn Sie versuchen, über 100 zu gehen, zwingt es Sie einfach zurück auf 100/die max. – Jourkey

1

Sie müssen nur den Wert des Feldes nach jedem Tastendruck testen und bevor es an das Feld gesendet wird (zum Beispiel mit einem Tastendruck Event Handler) - wenn der neue Tastendruck einen zu hohen Wert erzeugen würde, dann die Taste drücken .

Zum Beispiel - wenn der aktuelle Wert 20 ist und der Benutzer versucht, eine dritte Nummer einzugeben, sollten Sie die Taste drücken, indem Sie false aus dem Event-Handler zurückgeben. Grundsätzlich ist das einzige dritte Zeichen, das Sie zulassen sollten, "0" und nur, wenn der aktuelle Feldwert "10" ist.

+1

Ich würde empfehlen, diese Methode nicht zu verwenden. Ändern Sie es zumindest in das Blur-Event. Leute mögen es nicht, wenn ihre Eingaben validiert werden, bevor sie fertig sind. Nicht zu vergessen, es ist möglich, Textfelder ohne Tastatureingaben zu füllen. (Mauspaste) – recursive

1
<input type="text" id="test_id" /> 
<script> 
document.getElementById("test_id").onkeyup=function(){ 
    var input=parseInt(this.value); 
    if(input<0 || input>100) 
    alert("Value should be between 0 - 100"); 
    return; 
}  
</script> 
+0

Ich würde damit einverstanden sein, wenn Sie keine Warnungen verwendet haben. Ich hasse Popups für diese Art von Benachrichtigung. – tvanfosson

9

Ich würde vorschlagen, das jQuery Validation Plugin zu verwenden. Sehr flexibel und erweiterbar. Um Ihren Bereich zu behandeln, fragen Sie Folgendes ab. Es wird vorausgesetzt, dass alle Eingaben in Ihrem Formular, die mit der Klasse "Prozentsatz" markiert sind, vorhanden sind und in den angegebenen Bereich fallen.

$("#myform").validate({ 
    rules: { 
    percentage: { 
     required: true, 
     range: [0, 100] 
    } 
    } 
}); 

<input id="percent" name="percent" class="percentage" /> 

Der Grund, dass ich das Plugin vorschlagen ist, dass es viele Validierungs Situationen aus der Box behandelt, Sie von der Verantwortung entlastet Validierungscode für viele Szenarien zu schreiben - Sie Ihren kreativen Aufwand in besseren Möglichkeiten aufwenden können . Es wird auch von vielen Leuten benutzt und hat den zusätzlichen Vorteil, von einer großen Gemeinschaft verbessert zu werden.

aktualisieren: Auch mögen Sie vielleicht einen alternativen Eingabemechanismus, wie ein slider (demo) zu berücksichtigen, die die Daten in einer Art und Weise einschränken werden, die Benutzerfehler unterliegen nicht - oder zumindest nicht diese bestimmte Art von Fehler.

+0

Danke für Ihre Hilfe. Ich habe einen Schieberegler sowie ein Eingabefeld. Die Folie wird an die Eingabebox angehängt und umgekehrt. Der Grund, warum ich keine Validierung verwende, ist, weil die Eingabe eines zu großen Wertes den Schieberegler auf 100% setzen würde, aber das Eingabefeld würde nicht folgen, und das ist nur komisch. Außerdem kann das Blur-Ereignis den Benutzer von der Seite wegnehmen/das Eingabefeld ausblenden, und dem Benutzer bleibt ein defekter Wert zurück, ohne dass der Fehler jemals angezeigt wird. – Jourkey

+0

@Jourkey - siehe mein Kommentar zu der akzeptierten Antwort. Ich würde die Eingabe beim Erstellen des Schiebereglers ausblenden. Wenn das keine Option ist, würde ich wenigstens eine Warnung auslösen und das Formular nicht einreichen, anstatt den Wert zu erzwingen. – tvanfosson

-2

Wenn seine nur für die Anzahl der Zeichen, die nicht von 20 oder weniger (zum Beispiel), dann können Sie

<input type="text" name="usrname" maxlength="20" /> 

verwenden Wenn Sie einige andere Fälle, in das Eingabefeld zu handhaben müssen, dann wäre eine Funktion besser sein Möglichkeit.

+2

es geht um den Wert der Eingabe, nicht die Länge der Zeichenfolge! – behz4d

4

können Sie Math.max und Math.min verwenden

val = Math.min(100,Math.max(0,val)); 
5

HTML5 added several new input types, einschließlich number.

<form> 
    Quantity (between 1 and 100): 
    <input type="number" name="quantity" min="1" max="100"> 
</form> 

Neue Eingabetypen, die nicht von älteren Web-Browsern unterstützt wird, wird als <input type="text"> verhalten.

Runnable example von W3Schools.