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.