Comment interdire les caractères spécifiques lors de la saisie dans un formulaire d'entrée dans la plaine du JavaScript?

Je suis en train de créer une zone de texte nom d'utilisateur qui bloque l'entrée de l'utilisateur si il est un de ces (!,@,#,$,%,^,&,*,(,),+,=,;,:,`,~,|,',?,/,.,>,<,,,, ,").

L'idée n'est pas de faire le chèque par la suite, mais au moment du clic. J'ai eu deux idées de faire que les deux finissent mal. La première JS script ne semble pas fonctionner et la seconde JS script gèle l'ensemble de l'onglet.

Mon code HTML est:

<form name = "RegForm" class="login">
   <input type="text" name="username" id="username" placeholder="Enter your username">
</form>

Mon premier script JS est:
https://jsfiddle.net/ck7f9t6x

userID_textfield.onkeydown = function(e) {   
    var prohibited = "!@#$%^&*()+=;:`~\|'?/.><, \"";
    var prohibitedchars = prohibited.split("");
    var prohibitedcharcodes = new Array();

    for (var i = 0; i < prohibitedchars.length + 1; i++) {
        prohibitedcharcodes.push(prohibitedchars[i].charCodeAt(i));
        for (var a = 0; a < prohibitedcharcodes.length + 1; a++) {
            if (prohibitedcharcodes[a] === e.which) {
                return false;
            }
            else {
                return true;
            }
        }
    }
}

Mon deuxième script JS est:
https://jsfiddle.net/2tsehcpm/

var username_textfield = document.forms.RegForm.username;
username_textfield.onkeydown = function(e) {
    var prohibited = "!@#$%^&*()+=;:`~\|'?/.><, \"";
    var prohibitedchars = prohibited.split("");
    var text = this.value.toString();
    var chars = text.split("");
    for (var i = 0; i < chars.length + 1; i++) {
        for (var a = 0; a < prohibitedchars.length + 1; a++) {
            if (chars[i] == prohibitedchars[a]) {
                chars[i] = null;
            }
        }
    }
    this.value = chars.join();
}

Quel est le problème avec mon code et que dois-je faire à la place?

Toute réponse instructive serait grandement apprécié!

OriginalL'auteur Angel Politis | 2016-05-10