 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
31.03.2006, 23:21
|
#16
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi Steffen,
stimmt! Du hast Recht, funktionierte nur mit Opera, hab's abgeändert:
Test
Code:
function check4Digits(evt)
{
var keyCode = evt.keyCode || evt.which;
if ( keyCode )
{
if ( ( keyCode >= 48 && keyCode <= 57 ) || keyCode == 8 ||
( keyCode >= 96 && keyCode <=106 )
)
return true;
};
if ( evt.preventDefault )
evt.preventDefault();
else evt.returnValue = false;
return false;
};
tschau
Frank
|
|
|
05.04.2006, 23:29
|
#17
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
habs nochmal geändert:
Code:
function check4Digits(evt)
{
var keyCode = evt.keyCode || evt.which;
if ( keyCode )
{
if ( ( keyCode >= 48 && keyCode <= 57 ) || keyCode < 32 ||
( keyCode >= 96 && keyCode <=106 )
)
return true;
};
if ( evt.preventDefault )
evt.preventDefault();
else evt.returnValue = false;
return false;
};
damit auch tab etc. noch nutzbar bleibt
|
|
|
06.04.2006, 21:22
|
#18
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi Steffen,
ich hab' auch noch einen Fehler bemerkt: Opera wertet den keyCode 96 als "a" aus, hab's daher angepaßt. Des Weiteren setze ich jetzt den Event-Handler "dynamisch" beim "onload" der Seite, d.h. alles INPUT-Elemente der Klasse "numericInteger" werden jetzt validiert:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Malleus' Javascript FAQ: Zahlenvalidierung, Konvertierung nach Hexadezimal</title>
<script type="text/javascript">
function initPage()
{
oMyNumber = document.getElementById( "myNumber" );
oMyNumber.focus();
initNumericValidate();
};
function initNumericValidate()
{
var inputs = document.getElementsByTagName( "INPUT" );
for (var i = 0; i < inputs.length; i++ )
{
var className = inputs[ i ].className;
if ( className.indexOf( "numeric" ) != -1 )
{
inputs[ i ].onkeypress = check4Digits;
inputs[ i ].onkeydown = check4Digits;
}
};
};
function check4Digits( evt )
{
if ( !evt )
evt = window.event;
var keyCode = evt.which || evt.keyCode;
function isBetween( startKeyCode, endKeyCode )
{
return ( keyCode >= startKeyCode && keyCode <= endKeyCode )
};
if ( keyCode )
{
if ( keyCode < 32 )
{
return true;
};
if ( isBetween(48,57) || isBetween( 96, 105 ) )
{
if ( !( window.opera && keyCode > 96 && evt.type == "keypress" ) )
return true;
};
};
if ( evt.preventDefault )
evt.preventDefault();
else evt.returnValue = false;
return false;
};
function doIt()
{
alert( Number( oMyNumber.value ).toString( 16 ) );
oMyNumber.focus();
oMyNumber.select();
};
</script>
<style type="text/css">
</style>
</head>
<body onload="initPage()">
Zahl mit "0" Nachkommastellen: <input class="numericInteger" type="text" id="myNumber"/> <button onclick="doIt()">Hexadezimal</button>
<div id="myDiv">
</div>
</body>
</html>
Test
Javascript FAQ
tschau
Frank
|
|
|
06.04.2006, 23:41
|
#19
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
was man alles bedenken muss
Danke Frank !
|
|
|
08.04.2006, 22:50
|
#20
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
soweit ich mich errinere sind die keycodes von eventhandler zu eventhandler unterschiedlich. Ich hatte daher für soetwas nur onkeypress genutzt, da dies der einzige eventhandler war/(ist?) der den korrekten keycode (wenn man es mit der tastatureingabe vergleicht) zurück gibt.
Wie immer gibt es mehrere Wege die zum Ziel führen... hier meiner:
Code:
<script>
function onlyNumeric(e) {
e = e || event;
var cc = e.which || e.keyCode;
var c = String.fromCharCode(cc);
var res = c.match(/\d/);
if (res)
return true;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
}
</script>
<input type="text" onkeypress="onlyNumeric(event);" />
...habs nur im IE und FF getestet. Opera wäre also noch interresant
Gruss
Jan
|
|
|
08.04.2006, 22:51
|
#21
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
revidiere meine Lösung gleich wieder, da sie zu strikt ist... navigieren und soweiter funzt damit natürlich auch nicht mehr *grin* 
|
|
|
08.04.2006, 23:15
|
#22
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
so ists etwas besser... allerdings noch nicht wirklich final
Code:
function onlyNumeric(e) {
e = e || event;
var cc = e.which || e.keyCode;
var crtl = e.ctrlKey || e.modifiers & e.CONTROL_MASK;
if (
cc >= 37 && cc <= 40 /* Pfeiltasten */
|| cc == 8 /* Backspace */
|| cc == 46 /* entf */
|| cc == 120 && crtl /* STRG+X */
|| cc == 99 && crtl /* STRG+C */
)
return true;
var c = String.fromCharCode(cc);
var res = c.match(/\d/);
if (res)
return true;
if ( e.preventDefault )
e.preventDefault();
else e.returnValue = false;
}
Gruss
Jan
|
|
|
08.04.2006, 23:50
|
#23
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi Jan,
bei Deiner neuen Version geht unter MSIE und FF der Nummernblock nicht. Opera arbeitet einwandfrei! ...hatte das gleiche Problem in meiner ersten Fassung ;-)
Tschau
Frank
|
|
|
09.04.2006, 11:33
|
#24
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
um das mal zu überprüfen, habe ich ein Testscript erstellt:
Code:
<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
function check(evt,when)
{
var keyCode = evt.keyCode || evt.which;
var o = document.getElementById('out');
o.innerHTML += when + ": " + keyCode + " ";
if(when=='keyUp') o.innerHTML += '<br>';
};
</script>
</head>
<body onload="document.getElementById('input').focus();">
<input type="text" size="30" onkeydown="check(event,'keyDown');" onkeypress="check(event,'keyPress');" onkeyup="check(event,'keyUp');" id="input">
<br><h3>Ereignisse:</h3>
<div id="out"></div>
</body>
</html>
Also die events keyDown und keyUp sind immer identisch, nur keyPress liefert einen anderen Wert.
Wieso ?
|
|
|
10.04.2006, 09:30
|
#25
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Zitat:
|
Zitat von Malleus
Hi Jan,
bei Deiner neuen Version geht unter MSIE und FF der Nummernblock nicht. Opera arbeitet einwandfrei! ...hatte das gleiche Problem in meiner ersten Fassung ;-)
Tschau
Frank
|
läuft bei mir super. Evtl. hast du immernoch nen falschen event-handler benutzt? Keypress liefert für den korrekten Keycode.
Gruss
Jan
|
|
|
11.04.2006, 21:20
|
#26
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Homburg / Saarland
|
Hi Jan,
stimmt, ich hab' onkeydown benutzt ! Sachen gibt's, schon seltsam.
Ich hab' meine Version auch nochmal upgedatet;
Damit funktioniert es jetzt auch:
Code:
if ( keyCode < 32 )
return true;
if ( !isNaN( String.fromCharCode( keyCode ) ) )
return true;
}
Hier ist der ganze Quelltext: test
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Malleus' Javascript FAQ: Zahlenvalidierung, Konvertierung nach Hexadezimal</title>
<script type="text/javascript">
function initPage()
{
oMyNumber = document.getElementById( "myNumber" );
oMyNumber.focus();
initNumericValidate();
};
function initNumericValidate()
{
var inputs = document.getElementsByTagName( "INPUT" );
for (var i = 0; i < inputs.length; i++ )
if ( inputs[ i ].className.indexOf( "numeric" ) != -1 )
inputs[ i ].onkeypress = check4Digits;
};
function check4Digits( evt )
{
if ( !evt )
evt = window.event;
var keyCode = evt.which || evt.keyCode;
if ( keyCode )
{
if ( keyCode < 32 )
return true;
if ( !isNaN( String.fromCharCode( keyCode ) ) )
return true;
};
if ( evt.preventDefault )
evt.preventDefault();
else evt.returnValue = false;
return false;
};
function doIt()
{
alert( Number( oMyNumber.value ).toString( 16 ) );
oMyNumber.focus();
oMyNumber.select();
};
</script>
<style type="text/css">
</style>
</head>
<body onload="initPage()">
Zahl mit "0" Nachkommastellen: <input class="numericInteger" type="text" id="myNumber"/> <button onclick="doIt()">Hexadezimal</button>
<div id="myDiv">
</div>
</body>
</html>
tschau
Frank
|
|
|
12.04.2006, 00:23
|
#27
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
ja super, noch kürzer
Fängst du mit 'if ( keyCode < 32 )' die cursor usw ab? Wieso hatte ich da andere keyCodes...? *grübel*
Zur Info: Die Leertaste wird auch (noch) zugelassen.
Der nächste Schritt wäre eine Art Mask. Also z.B. ####,## zahlen und genau 1 Komma mit 2 darauf folgenden zahlen wobei das Komma und die Nachkommastellen optional sind  Ich habe irgendwo eine Lösung für den IE rumschwirren, würde mich mal interresieren ob das auch in anderen Browsern möglich ist. Wer ne Idee?
Gruss
Jan
|
|
|
12.04.2006, 01:01
|
#28
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
die Leertaste bekommt man so weg:
Code:
if (keyCode!=32 && !isNaN( String.fromCharCode( keyCode ) ) )
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:04 Uhr.
|
 |