+ Antworten
Seite 2 von 2 ErsteErste 1 2
Ergebnis 16 bis 29 von 29

Thema: Malleus' Javascript FAQ

  1. #16
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    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

  2. #17
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  3. #18
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    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:&nbsp;<input class="numericInteger" type="text" id="myNumber"/>&nbsp;<button onclick="doIt()">Hexadezimal</button>
    
    <div id="myDiv">
    
    </div>
    
    </body>
    </html>
    Test

    Javascript FAQ

    tschau

    Frank

  4. #19
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    was man alles bedenken muss

    Danke Frank !

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  5. #20
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    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

  6. #21
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    revidiere meine Lösung gleich wieder, da sie zu strikt ist... navigieren und soweiter funzt damit natürlich auch nicht mehr *grin*

  7. #22
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    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

  8. #23
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    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

  9. #24
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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 + "&nbsp;&nbsp;";
    	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 ?

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  10. #25
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    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. #26
    TP-Moderator Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Malleus ist ein richtiges Arbeitstier - DANKE Avatar von Malleus
    Registriert seit
    Aug 2004
    Ort
    Homburg / Saarland
    Beiträge
    711
    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:&nbsp;<input class="numericInteger" type="text" id="myNumber"/>&nbsp;<button onclick="doIt()">Hexadezimal</button>
    
    <div id="myDiv">
    
    </div>
    
    </body>
    </html>
    tschau
    Frank

  12. #27
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    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

  13. #28
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    die Leertaste bekommt man so weg:
    Code:
    if (keyCode!=32 && !isNaN( String.fromCharCode( keyCode ) ) )

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  14. #29
    TP-Senior Angelmaker ist auf einem guten Weg
    Registriert seit
    Jul 2006
    Ort
    Köln
    Beiträge
    247
    Nach stundenlangem RUmbrowsen mit dutzenden von Fragezeichen über dem Kopf stosse ich dann auf diese Schatzkiste. Direkt ein benötigtes Codebeispiel gefunden für dynamische Dropdown menus - flexibel, leicht anpaßbar - genial.

    Danke Malleus, großartige Arbeit.

    *einen Schrein für Malleus erricht`*
    Ich habe keine Signatur. Dieser Satz kein Verb.

+ Antworten
Seite 2 von 2 ErsteErste 1 2

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51