0

Mon script est la suivante:Pourquoi IE ne prend-il pas en charge mon script de blocage de caractères spéciaux dans mes champs de saisie?

var emailmask = /^[a-z0-9.]/g; 

function restrictCharacters(myfield, e, restrictionType) { 
if (!e) var e = window.event 
if (e.keyCode) code = e.keyCode; 
else if (e.which) code = e.which; 
var character = String.fromCharCode(code); 
if (code==27) { this.blur(); return false; } 
if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) { 
    if (character.match(restrictionType)) { 
     return true; 
    } else { 
     return false; 
    } 

} 
} 

L'entrée:

<input type="text" name="fx_username" value="asd" id="username" class="normal email need" onkeypress="return restrictCharacters(this, event, emailmask);"/> 

Il ne fonctionne tout simplement pas avec IE, mais FF, le chrome est correct. Pourriez-vous m'aider dans ce cas s'il vous plaît?

Editer: Cela ne fonctionne pas, il ne supprime pas les caractères spéciaux comme @ {} ¤ $ ß.

+1

Définir "ne fonctionne pas". Ce qui se produit? –

+5

Votre regex est horrible pour la validation par e-mail btw .. que se passe-t-il si j'ai '-' ou' _' ou '+' (oui, ceci est parfaitement valide) dans mon adresse e-mail? – ThiefMaster

+2

Vous ne devez pas utiliser de nombres magiques; mieux utiliser les constantes de [KeyEvent] (http://www.w3.org/TR/2000/WD-DOM-Level-3-Events-20000901/events.html#Events-KeyEvent) à la place. – Gumbo

Répondre

1

Votre fonction n'a pas toujours de valeur de retour.
Si cette condition:

if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) 

ne correspond pas, il retournera rien. On dirait que le comportement est différent dans les navigateurs. Dans MSIE, je pense que ce n'est pas évalué à faux.

Solution: ajoutez ceci à la fin de la fonction:

return false; 
1

Cette fonction est incorrecte de plusieurs façons.

  1. Vous ne devriez pas utiliser var sur le paramètre « e » dans cette première ligne. La façon classique d'écrire cela est

    e = e || window.event;

    Cependant, dans ce cas, il ne sera pas vraiment fonctionner correctement de toute façon, parce que le code dans votre « onkeypress » valeur d'attribut suppose qu'il peut utiliser window.event. C'est incorrect et ne fonctionnera pas dans Firefox.

  2. Vous n'avez pas défini "code" comme variable locale avec var.

  3. Le code fait l'hypothèse que this sera défini sur l'élément, alors qu'en fait le premier paramètre ("myfield") est la seule chose qui se réfère à l'élément.

  4. Si ce long test "if" échoue, la fonction renvoie undefined.

  5. L'expression régulière est incorrecte. Il correspond à n'importe quel caractère au début d'une chaîne, parce que vous avez "." entre parenthèses. Aussi ce modificateur "g" est inutile. (fixe) (bien que je suggère d'utiliser « RegExp.test (string) » au lieu parce qu'il ya probablement un peu plus rapide)

Il est un peu difficile de dire ce que vous voulez le code à faire ici, mais jusqu'à ce que toutes ces erreurs soient réparées, il n'y a pas de moyen clair de dire comment l'améliorer.

Questions connexes