Uncaught TypeError: Impossible d'appeler la méthode "toString" de null
Je suis en train de créer une classe en JavaScript pour valider un formulaire. Que vais vérifier les éléments de formulaire et de valider un champ si il a un attribut spécifique.
Toutefois, l'appel à getAttribute
n'est pas de retourner une valeur. Il n'est pas obtenir la valeur à l'intérieur d'une autre variable, mais, si j'ai l'impression, il fonctionne bien.
Voici le code de ma classe:
function valida() {
document.getElementById("msgDiv").innerHTML="";
var totalErros=0;
var x=document.getElementById("frm1");
for (var i=0;i<x.length;i++){
var input=document.getElementsByTagName("input")[i];
var campo=input.getAttribute("id");
var tipo=input.getAttribute("tipo");
var nome=input.getAttribute("nome");
var id=campo.toString(); //the error goes here
//var valor=_$(id).value;
alert(campo);
switch (tipo) {
case "obrigatorio":
if(document.getElementById(id).value==""){
document.getElementById("msgDiv").innerHTML+="Deu erro no campo "+nome+"<br />";
totalErros++;}
break
case "oemail":
if(document.getElementById(id).value==""){
document.getElementById("msgDiv").innerHTML+="Deu erro no campo "+nome+"<br />";
totalErros++;}
break
case "email":
if(!ValidaEmail(document.getElementById(id).value)){
document.getElementById("msgDiv").innerHTML+="O "+nome+" que você informou é inválido "+document.getElementById(id).value+" <br />";
totalErros++;}
break
default:
document.getElementById("msgDiv").innerHTML+="<br />";
}
}
if(totalErros==0) {
document.getElementById("msgDiv").innerHTML="Agora foi "+ totalErros;
return true;
}
}
- Votre anglais est assez bon, Toni!
- Faire
var input=document.getElementsByTagName("input")
maintes et maintes fois dans la boucle for est mauvais pour la performance.
Vous devez vous connecter pour publier un commentaire.
Votre problème est le suivant:
Vous êtes l'obtention d'une donnée d'entrée de l'élément et de le stocker dans la variable
input
. Vous êtes l'obtention de l'ID de l'élément et de le stocker dans la variablecampo
. Vous pouvez alors prendrecampo
et appeler toString() sur celui-ci.Le problème est que au moins un élément d'entrée n'a pas un ID. Parce que vous ne pouvez pas appeler
toString
surnull
, vous obtiendrez une erreur.Vous n'avez pas réellement besoin d'appeler
toString()
en premier lieu. Utilisez simplementcampo
comme est. Il va être nul (si il n'y a pas d'identité) ou une chaîne de caractères.Cette partie de votre code a piqué ma curiosité:
Cela prend la collecte de tous
<input>
des éléments sur votre page et prend lai
e chaque fois; et qui sait ce que l'élément d'entrée vous pouvez obtenir.Si vous voulez juste pour parcourir les éléments de la forme qui vous intéresse, c'est beaucoup plus facile et plus rapide:
Comme vous pouvez le voir, je prends le
id
de la propriété au lieu de laid
attribut; c'est généralement une chose de mieux à faire, en raison des changements dans les propriétés ne se reflètent pas toujours dans l'attribut concerné.Aussi, le
.toString()
est superflu, c'est déjà une chaîne non nulle.Mise à jour
Comme @bfavaretto souligné dans la section des commentaires, cette partie de votre code peut également être simplifiée:
à ceci:
Qui serait à l'œuvre si l'élément d'entrée a un id ou pas
document.getElementById(id)
dans leswitch
déclaration peut être remplacé parinput
trop.