Bonjour à tous,

J'ai un petit souci avec un contrôle de type < input type="text" > pour lequel je gère l'event OnKeyUp par javascript (entre autres).

Le problème que je constate (sous IE jusqu'à présent, pas sous FireFox) est que lorsque l'on ne spécifie pas de width à la textbox (ou en 100%), si on tape du texte qui dépasse la taille de la textbox, celle-ci s'agrandi au moment de la frappe de chaque caractère supplémentaire...

J'ai isolé le problème comme provenant du traitement effectué dans le OnKeyUp, mais sans trop comprendre pourquoi. Le fait que Firefox ne présente pas le problème me laisse supposer qu'il peut s'agir d'une subtilité quelconque dont je n'aurais pas connaissance.

Je m'en remets donc à votre avis, en espérant vivement que quelqu'un puisse m'aider à résoudre ce problème.

Note: evidemment, si je spécifie la taille du contrôle en taille fixe (ex: 200px), le problème n'est pas présent. Mais je ne peux pas me contenter de cette restriction car je doit pouvoir laisser la possibilité au contrôle de fonctionner comme un input traditionnel.


Je gère par Javascript l'event OnKeyUp afin de traiter le contenu de la textbox avec la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
function FormatNumber(textbox, decimalSeparator, decimalDigits, groupSeparator, groupDigits, enableGroupFormatting, currencySymbol, enableCurrencySymbol, allowNegative, negativeCss, negativeStyle)
{
   var temp = textbox.value;
 
   temp = ExtractNumber(textbox.value, decimalSeparator, decimalDigits, allowNegative);
 
   // Strip negative sign and hold the information in a boolean value
   var isNegative = temp.length > 0 && temp.charAt(0) == '-';
   temp = temp.replace('-', '');
 
   // Strip non significant zeros (ea : 000052 --> 52)
   temp = RemoveNonSignificantZeros(temp, decimalSeparator)
 
   // Apply Style Formatting
   ApplyStyleFormatting(textbox, isNegative, negativeCss, negativeStyle);
 
   // Check if it is necessary to split decimal and integer value
   if ((decimalDigits > 0) && (temp.indexOf(decimalSeparator) != -1))
   {
      // Split value into decimal and integer part
      var intPart = ent = temp.split(decimalSeparator)[0];
      var decPart = temp.split(decimalSeparator)[1];
 
      // Rebuild the whole value by joining integer, separator and decimal part
      temp = ApplyGroupSeparator(intPart, groupSeparator, groupDigits, enableGroupFormatting) + decimalSeparator + decPart;
   }
   else
   {
      temp = ApplyGroupSeparator(temp, groupSeparator, groupDigits, enableGroupFormatting);
   }
 
   // Add the negative sign if needed
   if (allowNegative && isNegative)
   {
      // only added if value is not empty
      temp = "-" + temp;
   }
 
   // Add the currency symbol if needed
   if (enableCurrencySymbol)
   {
      // only added if value is not empty
      temp = (temp == "") ? temp : currencySymbol + " " + temp;
   }
 
   textbox.value = temp;	
}
Merci d'avance pour tout conseil utile !