2010-01-14 5 views
0

La fonction editvalidate() ne reçoit pas d'appel du tout:Problème dans la validation de formulaire avec JavaScript

Veuillez expliquer pourquoi. Quel est le remède?

<script type="text/javascript"> 

function editvalidate() { 
    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; 
    var numericExpression = /^[0-9]+$/; 


    if(document.editprofile.userid.value == '' || document.editprofile.password.value == ''||document.editprofile.name.value == ''||document.editprofile.age.value == ''||document.editprofile.collegeid.value == ''||document.editprofile.mobile.value == ''||document.editprofile.address.value == ''||document.editprofile.department.value == ''||document.editprofile.email.value == ''||document.editprofile.sec_ques.value == ''||document.editprofile.answer.value == ''){ 
     alert("Hey! you can't left a field blank!"); 
     return false; 
    } 
    else if(!document.editprofile.email.value.match(emailExp)){ 
    alert("You need to enter a valid email address to get proper notifications!"); 
     return false; 

    } else if(!document.editprofile.mobile.value.match(numericExpression)){ 
    alert("Mobile numbers are all numeric digits i think!"); 
     return false; 

    } else if(document.editprofile.mobile.value.length < 10){ 
    alert("Mobile number must be 10 digit long!"); 
     return false; 

    } 


    else{ 
     return true; 
    } 

} 






</script> 

la forme est donnée ci-dessous et son utilisé pour extraire des données de base de données et se getfilled avec les entrées modifiables sont corrigées et valeurs sous la forme est submitted.its fonctionne bien tout simplement pas obtenir validé cz le editvalidate() ne s'appelle pas du tout. pourquoi?

<form name="editprofile" action="editprofile.jsp" method="post" onsubmit="return editvalidate();"> 

<table align="center"> 
<% 
    for(int i = 0; i < list.length ; i++){ 
%> 
<tr> 
    <td>Name:</td> 
    <td><input type="text" name="name" size="35" style="width: 219px" value="<%=list[i].getName() %>" maxlength="25"></td> 
</tr> 
<input type="hidden" name="userid" size="20" style="width: 220px" 
    value="<%=list[i].getUserid() %>" maxlength="10"> 
<tr> 
    <td>Address:</td> 
    <td><input type="text" name="address" size="46" 
    style="width: 221px" value="<%=list[i].getAddress() %>" 
    maxlength="50"></td> 
</tr> 
<tr> 
    <td>E-mail:</td> 
    <td><input type="text" name="email" size="20" 
    style="width: 220px" value="<%=list[i].getEmail() %>" maxlength="40"></td> 
</tr> 
<tr> 
    <td>Age:</td> 
    <td><input type="text" name="age" size="20" style="width: 219px" 
    value="<%=list[i].getAge() %>" maxlength="2"></td> 
</tr> 
<tr> 
    <td>College ID:</td> 
    <td><input type="text" name="collegeid" size="20" 
    style="width: 219px" value="<%=list[i].getCollegeid() %>" 
    maxlength="10"></td> 
</tr> 
<tr> 
    <td>Mobile:</td> 
    <td><input type="text" name="mobile" size="20" 
    style="width: 218px" value="<%=list[i].getMobile() %>" maxlength="10"></td> 
</tr> 
<tr> 
    <td>Department:</td> 
    <td><input type="text" name="department" size="20" 
    style="width: 218px" value="<%=list[i].getDepartment() %>" 
    maxlength="10"></td> 
</tr> 
<tr> 
    <td>Security Question:</td> 
    <td><input type="text" name="sec_ques" size="20" 
    style="width: 218px" value="<%=list[i].getSec_ques() %>" 
    maxlength="50"></td> 
</tr> 
<tr> 
    <td>Answer:</td> 
    <td><input type="text" name="answer" size="20" 
    style="width: 218px" value="<%=list[i].getAnswer() %>" maxlength="50"></td> 
</tr> 

<tr> 
    <td><input type="submit" name="operation" value="editprofile" 
    style="width: 118px"></td> 
    <td><input type="reset" value="Reset" name="B2"></td> 
</tr> 

<% 
    } 
%> 

je l'ai vérifié la manière u suggéré et a constaté que la fonction devient called.but pourquoi les alertes de repos r nt visible? isnt thatdue à l'attribut de valeur dans les balises d'entrée

Répondre

0

en fait, j'ai utilisé un paramètre de vérification de mot de passe dans le premier document si bloc document.editprofile.password.value == ''

et je n'ai jamais utilisé un attribut comme mot de passe dans le formulaire. C'était mon erreur et donc il ne fonctionnait pas.je l'ai trouvé en utilisant l'outil firebug.thanks pour l'aide.

+0

Ainsi, Firebug a réellement aidé à résoudre le problème. Ainsi, votre fonction a été ** invoquée **, mais elle est tout simplement erronée sur une ligne. Pourquoi ma réponse n'a-t-elle pas été acceptée? Puis-je vous aider à répondre à une question * médiocre *? Quoi qu'il en soit, je penserai à l'avenir une ou deux fois plus dans le futur avant d'aider les gens qui postent de mauvaises questions comme vous:/S'il vous plaît lisez ceci: http://catb.org/esr/faqs/smart-questions.html – BalusC

0

vous ne l'appelez pas partout de votre code html, vous devriez probablement appeler <form onsubmit="return editvalidate();">

Ok maintenant je vois qu'il formaté correctement, je ne me dérange pas vers le bas votes je leur donne parfois aussi.

@Robin Agrahari

vous avez probablement typo quelque part dans le javascript ne va aller Trought mais vous, essayez de tester un par un si à l'aide d'alerte comme vous le faites. Mais ne le faites pas sur sumbit, créez un bouton simulateur qui appellera (sur clic) cette fonction editvalidate(); et vérifiez votre fonction à fond et vous obtiendrez finalement le problème

+0

C'est exactement ce qu'il * fait *. –

+1

@ c0mrade, je sais quand vous postez cela, vous ne pouvez pas voir les balises html, car OP ne l'a pas formaté correctement, mais il semble que OP l'a fait exactement, donc pour éviter d'avoir plus de downvotes, je vous suggère de le supprimer , Je ne t'ai pas downvote btw, merci. – YOU

1

Avec le peu d'information donné jusqu'ici, tout que je peux répondre est: Exécutez juste un débogueur Javascript. Je peux vous recommander Firebug pour cela. Cela dit, à l'avenir, s'il vous plaît arriver à un SSCCE au lieu de découpes de code avec encombrement inutile. Cela évite d'explorer longtemps dans le code à la recherche de lignes de pertinence et à première vue des questions évidentes comme "Sont-ils dans le même fichier?", "Avez-vous ajouté alert('blah') comme première ligne de fonction pour voir si elle est invoquée?" Le navigateur a-t-il activé JS? "," Etes-vous sûr (e) que vous n'avez pas entré le nom de la fonction? "," N'y a-t-il pas plus de code qui pourrait l'avoir dérangé? "

Voici un exemple de base d'un tel SSCCE:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2063598</title> 
     <script> 
      function validate(form) { 
       alert('Validate method invoked!'); 
       return false; 
      } 
     </script> 
    </head> 
    <body> 
     <form onsubmit="return validate(this)"> 
      <input type="text" name="foo" class="required"> 
      <input type="submit"> 
     </form> 
    </body> 
</html> 

Cela dit, je vois que vous utilisez encore l'héritage scriptlets dans votre JSP. Si vous le pouvez, je recommande vivement d'arrêter de l'utiliser et de passer à taglibs/EL avant qu'il ne soit trop tard. Le code Java brut appartient aux classes Java, pas aux fichiers JSP.

exemple de base avec JSTL « s (juste déposer jstl-1.2.jar dans /WEB-INF) c:forEach:

<table> 
    <c:forEach items="${users}" var="user"> 
     <tr> 
      <td><input type="text" name="address" value="${user.address}"></td> 
      <td><input type="text" name="email" value="${user.email}"></td> 
      <td><input type="text" name="college" value="${user.college}"></td> 
     </tr> 
    </c:forEach> 
</table> 

Et aussi garder CSS dans son propre fichier CSS pour un style distinct de contenu et d'augmenter les performances webapp et maintenabilité.

0

Comment pouvez-vous dire qu'il n'est pas appelé? Je mettrais une alerte en haut de la méthode et je verrais si ça l'atteignait.Il est possible que tu commences quelque part une erreur. Si une alerte au sommet de editvalidate ne se produit pas, essayez de changer la obsubmit à: « Bonjour »

onsubmit="alert('hello!'); return editvalidate();" 

alors vous devriez au moins voir lorsque vous cliquez sur le bouton Envoyer.

+0

Je l'ai vérifié comme vous l'avez suggéré et trouvé que la fonction est appelée. Mais pourquoi les alertes de repos sont-elles visibles? –

+0

Pas sûr, mais vous devriez être capable de le comprendre facilement en plaçant quelques alertes dans le reste de la fonction ou, comme mentionné précédemment, vous utilisez un débogueur JS comme Firebug. – Bialecki

0

regardant le code devrait être appelé

Ou essayez

onsubmit="editvalidate(); return false;"

Ou vérifier où il est pas mal placée, je veux dire le javascript doit être < tête > </tête >

Questions connexes