[Javascript] problème Firefox javascript

Résolu
CorentinASF -  
 touriste -
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. GallyNet Messages postés 437 Statut Membre 387
     
    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)
    3
  2. amine
     
    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
  3. CorentinASF
     
    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 ;)
    0
    1. touriste
       
      cest bon , merci de l"exemple
      0
  4. Nicomart
     
    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
    0
    1. Hubert
       
      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.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pepito
     
    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...
    0
  7. Joanel
     
    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
    0