2011-03-22 3 views
0

Je suis en train d'écrire une validation de formulaire javascript de PreSaveAction() comme ci-dessous:javascript validation du formulaire

function PreSaveAction() { 
    var number1 = getTagFromIdentifierAndTitle("INPUT","TextField","Quantity"); 
    //var ddl1 = getTagFromIdentifierAndTitle("select","DropDownChoice","Is Product Completed"); 
    var myvar = getTagFromIdentifierAndTitle("TextArea","TextField","Description"); 
    //if (dropdown1.value == "Yes" && date1.value == "") 
    if (number1.value == "" || myvar.value === "") 
    { 
     alert("Please fill all the Required Fields"); 
     return false; // Cancel the item save process 
    } 

    if(confirm("Do you want to continue with this information?")==true) 
    { 

    alert("Successfully Submitted"); 
    return true; // OK to proceed with the save item 

    } 

    return false; 

} 

et le script pour la fonction getTagFromIdentifierAndTitle

function getTagFromIdentifierAndTitle(tagName, identifier, title) { 
    var len = identifier.length; 
    var tags = document.getElementsByTagName(tagName); 

    for (var i=0; i < tags.length; i++) { 
     var tempString = tags[i].id; 
     if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) { 
      return tags[i]; 
     } 
    } 
    return null; 
} 

ce que j'ai observé ci-dessus est il ne valide pas les deux champs ensemble où j'utilise et opérateur.

que je fais quelque chose de mal dans le script

S'il vous plaît aidez-moi à ce sujet.

Merci à l'avance

+1

Nous devons voir le code de la fonction 'getTagFromIdentifierAndTitle' ou au moins savoir exactement ce qu'il renvoie - est-ce l'élément de formulaire actuel? Aussi ce que vous voulez dire "ne pas valider les deux champs"? Vous en remplissez un seul et obtenez toujours la confirmation? –

+0

@Shadow Wizard Ajouté le code complet, y compris la fonction getTagFromIdentifierAndTitle et vous avez raison de remplir un champ encore arriver à la confirmation? – Jam

+0

voir ma réponse. :) –

Répondre

1

si vous voulez que le test échoue si soit des valeurs sont vides, vous voulez la propriété OU: ||

Ceci s'assurera qu'ils sont tous deux non vides.

0
var number1 = getTagFromIdentifierAndTitle("INPUT","TextField","Quantity"); (TextBox) 

var Desc1 = getTagFromIdentifierAndTitle("TextArea","TextField","Description"); (MultiLine) 


if (number1.value == "" || Desc1.value == "") //Changed here 
    { 
     alert("Please fill all the Required Fields"); 
     return false; // Cancel the item save process 
    } 
return true; 
+0

il ne valide toujours pas le champ multiligne – Jam

0
if (number1.value == "" || Desc1.value == "") 
    { 
     alert("Please fill all the Required Fields"); 
     return false; // Cancel the item save process 
    } 
return true; 

Vous voulez utiliser un ou ici. Parce que vous voulez être ensemble les deux champs, non?

if (number1.value != "" && Desc1.value != "") 

Est également possible.

Pour valider le bon numéro:

number1.length && !isNaN(Number(number1.value)); //Number("") returns 0, not NaN 
+0

Oui, je veux que les deux champs soient obligatoires et j'ai mis à jour l'extrait de code complet en haut à nouveau. Je pense que la première fois qu'il valide et la deuxième fois il ne vérifie pas – Jam

+0

Que voulez-vous dire par une première fois? Voulez-vous vraiment dire que vous obtenez des résultats différents sur différentes courses? Comme Shadow Wizard a dit: Vous devriez nous montrer 'getTagFromIdentifierAndTitle'. – paztulio

+0

mis à jour la fonction getTagFromIdentifierAndTitle – Jam

3

Il est souvent préférable d'utiliser « === » au lieu de « == » puisque cela inclut une vérification du type aussi bien.

+1

Vrai, lorsque vous atteignez 50 points de réputation, veuillez poster des commentaires sur des questions ou des réponses spécifiques. :) –

+0

@Shadow: vrai, je l'ai dûment aidé sur son chemin. :-) –

+0

@Andrzej - acclamations, un de plus à aller ..: D –

2

Vous avez plus d'un élément avec le même ID, ce qui provoque uniquement le retour du premier élément par votre fonction.

Demandez ID unique pour chaque élément puis changer la deuxième ligne à quelque chose comme:

var myvar = getTagFromIdentifierAndTitle("TextArea", "txtDescription", "Description"); 

En supposant que vous avez maintenant id="txtDescription" à l'élément textarea.

Alternativement, vous pouvez affecter la même classe à plusieurs éléments, mais vous ne voyez pas pourquoi vous ne pouvez pas donner d'ID différent.

Questions connexes