2010-12-31 5 views
1

Okay, zuerst einige Hintergrund, kann ich keine Javascript-Bibliothek außer YUI für dieses Projekt verwenden.Blocknummern von Eingabe in ein Eingabefeld

Was ich versuche, ist eine Eingabe zu nehmen und zu blockieren, um nur numerische Eingaben zuzulassen. Ich weiß, dass dies in der Validierung einfacher ist, aber die PM will es onkeypress. Was ich habe, wurde aus dem Laufen im Netz konstruiert und funktioniert großartig in Firefox. Leider muss dies mit IE8 und IE6 kompatibel sein, und es funktioniert auch nicht.

Hier ist, was ich bisher:

<script type="text/javascript"> 
    function onlyNumbers(evt) { 
     evt = (evt) ? evt : window.event 
     var charCode = (evt.which) ? evt.which : event.keyCode   

     if (charCode > 31 && (charCode < 48 || charCode > 57)) 
      return false; 

     return true; 

    } 
</script> 
<input type="text" id="<%=Model.HtmlID %>" value="<%= startingAnswer %>"name="<%=Model.HtmlID %>" 
maxlength="<%=maximumLength %>" onkeypress="return onlyNumbers(event);" /> 

Irgendwelche Ideen auf, was falsch ist, dass es nicht funktionieren im IE macht?

+0

Die Mehrheit der großen Websites haben IE 6 Unterstützung gestoppt, es sei denn, Sie Konkurrenten sind immer noch es zu unterstützen Ich würde jedem im Web einen Gefallen Drop Support dafür empfehlen. – Webnet

+0

Ja. Client ist ein sehr großes Unternehmen, das immer noch IE6 verwendet, dies ist ein internes Modul für sie. – guildsbounty

+0

Bitte tun Sie der Welt einen Gefallen und brechen Sie die Funktionalität nicht, wenn Modifier-Tasten gedrückt werden. Suchen Sie nach 'evt.shiftKey',' evt.altKey', 'evt.ctrlKey' und' evt.metaKey'. Ich kann mich nicht daran erinnern, ob das alles browserübergreifend kompatibel ist, aber wenn nicht, ist es wahrscheinlich, dass YUI solche Dinge behebt. – eyelidlessness

Antwort

1
<script type="text/javascript"> 
    function onlyNumbers(target) { 
     var newVal = document.getElementById(target).value; 
     if (isNaN(newVal)) { 
      document.getElementById(target).value = newVal.replace(/[^0-9.]/g, ""); 
     } 
    } 


</script> 
<input type="text" id="<%=Model.HtmlID %>" value="<%= startingAnswer %>"name="<%=Model.HtmlID %>" 
maxlength="<%=maximumLength %>" onkeyup="javascript:onlyNumbers('<%=Model.HtmlID %>');" /> 

Es dauerte etwas mehr Mühe und ein wenig Kreativität, aber ich habe dieses bekommen herausgefunden. Dies verbietet nicht wirklich die Eingabe, sondern löscht einfach alles, was nicht erlaubt ist, sobald Sie den Schlüssel loslassen. Wirklich funktioniert auf IE6 zu

+0

Ich nehme an, dass dies für alle Browser funktioniert, aber es ist sehr hässlich Lösung, weil die Buchstaben im Eingabefeld angezeigt werden, sogar eine Menge von ihnen, wenn Sie nicht die Hoch-Taste loslassen und es kann sogar – lisak

+0

@lisak eingereicht werden : Ja, ich stimme zu. Es ist eine abscheuliche Lösung. Ich hasse die Tatsache, dass ich so einen ungeschickten Hack schreiben musste. Aber es war das einzige, was ich finden konnte (selbst nachdem ich alle Lösungen ausprobiert hatte, die ich hier finden konnte), die universell zwischen IE8, 6 und Firefox funktionieren würde. – guildsbounty

0

YUI verfügt über eine Textfeldvalidierung als Teil des Formularmoduls. Ein Beispiel (YUI 3)

var myForm = new Y.Form({ 
method : "post", 
action : "/test.php?action=submit", 
inlineValidation : true, 
fields : [ 
    {name : 'input1', type : 'text', label : 'Numbers only: ', validator : 'IntegerField'}, 

    {type : 'submit', label : 'Submit'}, 
    {type : 'reset', label : 'Reset'} 
] 
}); 
myForm.render('#formContainer'); 
+0

Leider ist dies nicht Teil einer eigenständigen Form, es ist eine ziemlich freakish Mash-up von Ascx-Dateien alle zusammen in einer modularen Art und Weise zusammengestopft. Funktioniert dies zufällig außerhalb einer YUI-Form? – guildsbounty

+0

Hm. Ich bin mir nicht sicher. Ich denke, es behandelt das gesamte Formular vom Rendern bis zur Validierung. Es tut uns leid! Es sieht so aus, als ob Sie die richtige Problemumgehung durch Ihre Antwort gefunden haben. –

+0

leider, nein ... es funktioniert immer noch nicht in IE. Es schien für ein paar Minuten so zu sein, aber anscheinend lag ich falsch. Jetzt versuche ich einen Weg zu finden, eine laufende Regex auf der gesamten Schnur in der Textbox onkeyup zu tun, um alles heraus zu reißen, das nicht Text ist ... – guildsbounty