2009-09-08 11 views
0

Je ne sais pas pourquoi cela ne fonctionne pas, mais en faisant des fonctions de validation et en essayant de générer un message dynamique à une alerte quand ils frappent soumettre et oublié de remplir un champ. Cela fonctionne seulement sur le deuxième clic du bouton de soumission, en ce qui concerne la suppression de la chaîne, tout le reste fonctionne quand il le devrait.Javascript ne remplacera pas la chaîne

Voici le code:

var fname = $('#fname'); 
var lname = $('#lname'); 

function validatefname(){ 
var a = fname.val().length; 

if(a < 2) { 
    fname.prev().addClass("error"); 
    if(msg.search("First Name") == -1) { 
     msg+= "-Please enter your First Name\n"; 
    } 
    return false; 
} else { 
    fname.prev().removeClass("error"); 
    msg.replace(/Please enter your First Name\n/g, ""); 
    return true; 
} 
} 

fname.blur(validatefname); 
fname.keyup(validatefname); 

step4submit.click(function(){ 
    if(validatefname()) { 
     step4form.submit(); 
     return true 
    } else { 
     msg+= "\nPlease fill out the fields marked in red"; 
     alert(msg); 
     msg = ""; 
     return false; 
    } 
}); 
+0

En outre, le gestionnaire de clic du bouton de soumission est le mauvais endroit pour valider les formulaires. Si le formulaire est soumis par un moyen autre que le léchage du bouton, par exemple en appuyant sur Entrée, la fonction de validation peut ne pas être appelée. Utilisez toujours form.onsubmit pour la validation, pas submitinput.onclick. – bobince

+0

Cela a du sens, mais fonctionne-t-il également sur un clic d'étiquette d'ancrage? Je ne comprends pas cela résoudre le problème pour appuyer sur Entrée à la fin ou au milieu de la forme. –

Répondre

7

String.replace renvoie une nouvelle chaîne, plutôt que de modifier la chaîne qui fait l'appel remplacer.

Vous devez

msg = msg.replace(blah) 
4

Essayez de changer

msg.replace(/Please enter your First Name\n/g, ""); 

à

msg = msg.replace(/Please enter your First Name\n/g, ""); 
5

En JavaScript, les chaînes sont immutable, ils ne peuvent jamais changer. Ainsi, si vous appelez une fonction pour modifier une chaîne d'une manière ou d'une autre, cette fonction renvoie une nouvelle chaîne nouvelle avec vos modifications, plutôt que de modifier la chaîne d'origine.

Changer la ligne qui effectue le remplacement pour enregistrer le résultat du remplacement de nouveau dans la variable d'origine, comme ceci:

msg = msg.replace(/Please enter your First Name\n/g, ""); 

(il y a diverses raisons de performance et de sécurité, mais qui est pour un autre jour/une autre question).

Questions connexes