[Javascript] problème Firefox javascript

Résolu/Fermé
CorentinASF - 14 mars 2006 à 09:54
 touriste - 17 sept. 2011 à 10:47
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
A voir également:

6 réponses

GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
15 mars 2006 à 09:01
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
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
CorentinASF
15 mars 2006 à 14:22
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
cest bon , merci de l"exemple
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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