Hallo,
ich würde das folgendermaßen machen:
<input type="text" id="textfeld">
<script type="text/javascript">
[code lang=javascript]// Der Code wird in eine selbstausführende Funktion verpackt,
// damit die Variablen und Funktionen nur lokal sind.
(function () {
// [link:http://molily.de/js/event-handling-fortgeschritten.html#einfaches-addevent@title=addEvent-Helferfunktion]
function addEvent (obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
} else if (obj.attachEvent) {
obj.attachEvent('on' + type, function () {
return fn.call(obj, window.event);
});
}
}
// Greife auf das Textfeld zu
var textfeld = document.getElementById('textfeld');
// Registriere Event-Handler
addEvent(textfeld, 'keyup', filterInput);
addEvent(textfeld, 'change', filterInput);
addEvent(textfeld, 'keypress', preventInput);
// Filtere den [ref:self812;javascript/objekte/elements.htm#value@title=value-String] des Feldes mit [ref:self812;javascript/objekte/string.htm#replace@title=replace] und einem [ref:self812;javascript/objekte/regexp.htm@title=regulären Ausdruck]
// (Lösche alle Zeichen die nicht 0-9 sind)
function filterInput (e) {
textfeld.value = textfeld.value.replace(/[^\d]/g, '')
}
// Verhindere, dass überhaupt andere Zeichen als 0-9
// eingegben werden können.
function preventInput (e) {
// Hole den Code des gedrückten Zeichens browserübergreifend
var charCode = e.charCode || e.keyCode;
// Wandle Code in Zeichen um
var char = String.fromCharCode(charCode);
// Teste mit einem regulären Ausdruck, ob es 0-9 ist
if (/[^\d]/.test(char)) {
// Wenn nicht, [link:http://molily.de/js/event-handling-objekt.html#standardaktion@title=unterdrücke die Standardaktion]
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
}
})();
</script>[/code]
Mathias