[Javascript] problème Firefox javascript

Résolu
Bonjour,

J'utilise la fonction javascript suivante afin de bloquer la saisie de caractères dans une zone de saisie :

function OnlyNumber()
{
if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;
}

Je l'affecte à ma zone de saisie comme ceci :
<INPUT TYPE="text" NAME="nombre" SIZE=6 onKeyPress="OnlyNumber();">

Sous IE, la saisie est effectivement impossible!
Sous FF, je peux saisir n'importe quel caractère!

Mon premier avis perso est que l'évènement onKeyPress n'est pas géré par Firefox!

Pouvez-vous m'aider concernant ce petit soucis!
Merci à vous par avance!

Corentin

6 réponses

  1. L'evenement onkeypress doit bien etre gere par firefox car elle est dans la recommendation du W3C.
    Pour tant assurer, ajout un alert('test') au début de ta fonction.

    Pour connaitre qu'elle erreur il peut y avoir, tu peut essayer d'ouvrir la console javascript de firefox, elle te dira surement que event n'existe pas. Et pour cause, elle n'a été défini nul part (IE le définit par défaut, par firefox).

    Pour résoudre ca, tu modifie ton onKeyPress comme suit :
    onKeyPress="OnlyNumber(evt);"

    (je suis pas sur pour evt, ca peut être aussi event)

    et ta fonction :
    function OnlyNumber(event) 

    (la tu peut mettre ce que tu evut evt, ou event)
    1. bonjour,
      mon problème c'est que mon code java script ne s'exécute plus
      je veux que mon champ de texte m'affiche tous les N° d'inventaire qui commence par la lettre que l'utilisateur va saisir
      je pense que mon code est correcte puisque rien n'est souligné en rouge(:D)
      j'ai essayé avec la balise script dans la mm page jsp et en utilisant un fichier JS
      Merci de m'avoir aider
      1. Salut à tous !

        J'ai un petit souçi avec une fonction javascript qui fonctionne trés bien sous IE7 mais pas sous Firefox.

        C'est une fonction que j'appel sur un clic sur bouton pour lancer une recherche, en fait elle traite l'URL fait une redirection, ensuite en PHP je récupére les paramétres de l'URL pour effectuer la recherche sur ma BDD.

        Le code est le suivant :

        function lancer() {
        doc = document.location.href.split("?");
        if(doc.length>1) {
        ouEst = doc[1].indexOf("query");
        if (ouEst>=0) {
        location.href=doc[0]+"?"+doc[1].substring(0,(ouEst-1))+"&query="+recherche.value;
        }
        else {
        location.href=doc[0]+"?"+doc[1]+"&query="+recherche.value;
        }

        }
        else {
        location.href=doc[0]+"?"+"query="+recherche.value;
        }

        }

        La page se trouve à cette adresse : http://www.joanel.fr/recherche.php.

        Merci

        Djodjo
        1. Pour faire simple, on peut aussi remplacer le onkeypress par un onkeydown.

          Dans MSIE, event.keyCode renvoie bien le code ASCII du caractère pressé lors de onkeypress.
          Lors du même événement, Firefox renvoie 0 pour les touches alphanumériques.

          En revanche event.keyCode renverra le code ASCII du caractère pressé si la fonction est appelée lors de onkeydown.

          function OnlyNumber (evt) {
          ...
          alert(evt.keyCode);
          ...
          }

          <input type="text" onkeydown="OnlyNumber(evt);" />

          Vous pouvez trouver mon script pour n'accepter que des nombres entiers à cette url :
          https://www.toutjavascript.com/forum/

          N.B. : A l'avenir, essayez de donner des titres plus précis pour les nouvelles discussions. C'est possible...
          1. Bonjour à vous,

            j'ai également eu ce problème avec ff. Suite à l'aide d'un autre internaute, j'ai effectivement utilisé la même solution. Mais l'ennui est que ff bloque également les touches de navigation (flèches directionelles, suppr, retour arrière, tab...). Pour certaines, les keycodes font effet, mais pour d'autres (flèches par exemple), même en ajoutant les keycodes à la liste des touches acceptées, cela n'a aucun effet.

            Est ce que vous avez été confrontés à ce problème ?

            Merci
            1. Salut, j'ai également eu ce problème mais j'ai été en mesure de le résoudre en combinant les évènements OnKeyPress et OnKeyDown. Voici une ébauche de mon code :

              <SCRIPT LANGUAGE="JavaScript">
              function ecrit(e, obj, type) 
              {
              	// Variable
              	var browser = "";
              	// Firefox
              	if (e.which)
              	{
              		// On determine le code ASCII
              		keynum = e.which
              		// On determine le navigateur
              		browser = "FF";
              	}
              	// Autre navigateur (non supporter)
              	else
              	{
              		// On affiche la touche sans rien faire
              		return true;
              	}
              	// On attrape la touche DELETE et on lui assigne le key code 7
              	if ( type == "down" )
              	{
              		// Touche DELETE
              		if (  keynum == 46 )
              		{
              			// On lui assigne une nouvelle combinaison
              			keynum = 7;
              		}
              		// On permet de se deplacer
              		else if ( keynum >= 37 && keynum <= 40 )
              		{
              			return true;
              		}
              		// On ne permet aucune autre touche
              		else
              		{	
              			return false;
              		}
              	}
              	// On determine le caractere
              	keychar = String.fromCharCode(keynum);
              	// On insere le caractere
              	return insertion( obj, keychar, keynum, browser );
              }
              function insertion(obj, keychar, keynum, broswer) 
              {
              	// Variable 
              	var position;
              	// Firefox
              	if ( broswer == "FF" )
              	{
              		// Variable de travail
              		var start = obj.selectionStart;
              		var end   = obj.selectionEnd;
              		// Toutes les autres touches
              		if ( keynum >= 32 || keynum == 13 )
              		{
              			// On affiche la touche
              			main.password.value = main.password.value.substr(0, start) 
              						+ keychar
              						+ main.password.value.substr(end, obj.value.length);
              		}
              		else
              		{
              			// Touche DELETE
              			if ( keynum == 7 )
              			{
              				// On enleve un caractere
              				main.password.value = main.password.value.substr(0, start) 
              							+ main.password.value.substr(end + 1, main.password.value.length);
              			}
              			// Touche BACKSPACE
              			if ( keynum == 8 )
              			{
              				// On enleve un caractere
              				main.password.value = main.password.value.substr(0, start - 1) 
              							+ main.password.value.substr(end, main.password.value.length);
              			}
              		}
              	}
              	// On donne le focus a l'object
              	obj.focus();
              	// Traitement pour les autres touches
              	if ( keynum >= 32 || keynum == 13 )
              	{
              		// Positionnement
              		position = start + 1;
              	}	
              	// Traitement pour la touche DELETE
              	if ( keynum == 7 )
              	{
              		// Positionnement
              		position = start;
              	}
              	// Traitement pour la touche BACKSPACE
              	if ( keynum == 8 )
              	{
              		// Positionnement
              		position = start - 1;
              	}
              	// On positionne le curseur
              	obj.setSelectionRange(position, position);
              	// On affiche pas la touche car on l'a ajoute manuellement
              	return false
              }
              </SCRIPT><FORM NAME="main">
              <TEXTAREA ROWS=7 NAME="password" COLS=70 WRAP=SOFT onKeyPress="javascript:return ecrit(event, this, 'press')" onKeyDown="javascript:return ecrit(event, this, 'down')">Voici un exemple</TEXTAREA></FORM>


              Il est possible d'adapter le code pour Internet Explorer. L'utiliser que j'ai trouvé avec mes fonctions est de mettre un champ <TEXTAREA> en type="password". L'idée est de remplacer chaque caractère par des étoiles. Je n'ai pas donné ma solution car je suis entrain de l'adapter pour IE. Je la publiera sous-peu.
          2. Merci beaucoup GallyNet pour ton aide!
            La réponse était quasiment exacte ;)

            window.event est spécifique à ie!!
            le script suivant marche à merveille!
            il permet de ne saisir des nombres dans une zone de saisie!

            <script language="javascript">
            <!--
            function OnlyNumber(e)
            {
            // if aEvent is null, means the Internet Explorer event model,
            // so get window.event.
            var IE5 = false;

            if (!e) var e = window.event;
            if (e.keyCode) { IE5= true; code = e.keyCode;}
            else if (e.which) code = e.which ;

            //test du code
            if (code < 48 || code > 57)
            {
            if(IE5) e.returnValue = false;
            else e.preventDefault();
            }
            }
            //-->
            </script>

            Un grand merci pour ton aide qui m'a mis largement sur la voie ;)
            1. cest bon , merci de l"exemple