2009-08-21 5 views
2

J'ai plusieurs champs de saisie où ils ont les mêmes noms de classes. Je dois vérifier pour au moins 1 d'entre eux n'est pas vide. J'ai donc,valider 1 entrée de plusieurs entrées en utilisant jquery

$('form[name=expForm]').submit(function(){ 
var msg = ""; 
var found = false; 
$('.date-mask').each(function(){ 
    if($(this).val()){ 
    found = true; 
    } 
}); 

if (found != true) { 

msg + = "Veuillez fournir au moins 1 date avant de soumettre. \ N"; return false; } var calcFnd = false; $ ('.calc'). Each (function() { if ($ (this) .val()) { calcFnd = true; } });

if (calcFnd! = True) { msg + = "Veuillez fournir au moins 1 dépense avant de l'envoyer. \ N"; return false; }

si (msg! = "") { alerte (msg); return false; }

if($('.ttlR27').val()==""){ 
    var net = $('.ttlR26').val(); 
    $('.ttlR28').val(net); 
} 
return false; 

}); 

<cfloop from="1" to="#ArrayLen(labels)#" index="r"> 
<tr> 
<td class="labels <cfif labels[r] EQ "Day of Week:">row1</cfif>"><cfif ArrayIsDefined(labels,r) AND labels[r] NEQ "Open1"><cfif labels[r] EQ "Open"><input type="text" id="descript#r#" name="descript#r#" class="description descript#r#" value="Enter text here" style="width:auto;" /><cfelse>#labels[r]#</cfif></cfif></td> 

<cfloop from="1" to="7" index="i"> 
    <td id="Day#i#" class="row#r# col#i#"> 
    <cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2> 
    <input type="text" class="date-mask" name="dates#i#" required="yes" message="Please provide at least 1 date before submitting."> 
    <cfelse> 
    <input type="text" 
    <cfif labels[r] EQ "Personal Car: Mileage ##"> id="gasamount#i#" <cfelseif labels[r] EQ "Personal Car: Mileage $">id="gasmoney#i#"</cfif><cfif labels[r] EQ "Open">id="open#r#"</cfif><cfif labels[r] EQ "Daily Totals">id="dailytotals#i#"</cfif> class="all <cfif labels[r] EQ "Personal Car: Mileage ##">gasamount <cfelse><cfif labels[r] NEQ "Daily Totals">C#i# </cfif></cfif><cfif labels[r] EQ "Personal Car: Mileage $">gasmoney<cfelse>calc R#r#<cfif labels[r] EQ "Daily Totals"> </cfif></cfif><cfif labels[r] EQ "Daily Totals">ttlC#i#</cfif><cfif labels[r] EQ "Less Advance(if applicable)"> less</cfif><cfif labels[r] EQ "Net Due Employee"> net</cfif><cfif labels[r] EQ "Open"> open</cfif>" 
    <cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $" OR labels[r] EQ "Open1">readonly="readonly"</cfif> 
    name="<cfif labels[r] NEQ "Personal Car: Mileage ##" AND labels[r] NEQ "Personal Car: Mileage $" AND labels[r] NEQ "Dates:" AND labels[r] NEQ "Open1" AND labels[r] NEQ "Daily Totals">R#r#.C#i#</cfif><cfif labels[r] EQ "Personal Car: Mileage ##">gasamt#i#</cfif><cfif labels[r] EQ "Daily Totals">celltotals#i#</cfif><cfif labels[r] EQ "Personal Car: Mileage $">gastot#i#</cfif>" /></cfif> 
     </cfif> 
    </td> 
</cfloop> 

    <td class="totals<cfif r EQ 1>1</cfif>"><cfif r EQ 1>Total<cfelse><input type="text" <cfif labels[r] EQ "Less Advance(if applicable)">id="less"</cfif><cfif labels[r] EQ "Net Due Employee">id="net"</cfif>id="totals" class="ttlR#r#" name="totals#r#" readonly="readonly" /></cfif></td> 


</tr> 
</cfloop> 

Les noms de classe qui sont utilisés sont les suivants: date masque, pour la première rangée de dates et calc, pour le reste de la table.

J'ai seulement besoin d'une entrée pour ne pas être vide pour permettre une soumission réelle.

Des idées?

Modifier Voici le lien vers la page en direct. Ce que je valide ici sont deux choses différentes, mais essentiellement la même fonction. La première rangée, les dates. En outre, la table entière. Si ce n'est pas tous, presque chaque entrée a l'une des mêmes classes.

Répondre

2

@ code de karim79 devrait fonctionner.Ici, je l'ai écrit une preuve de concept que cela fonctionne:

Le script:

function checkFields() { 
    var found = false; 
    $('.huh').each(function(){ 
     if($(this).val()){ 
      found = true; 
      return false; 
     } 
    }); 

    if (found == true) { 
     alert("at least one field has value"); 
    } else { 
     alert("all fields are empty"); 
    } 
} 

La majoration

<input type="text" class="huh" name="limit1" /> 
<input type="text" class="huh" name="limit2" /> 
<input type="text" class="huh" name="limit3" /> 
<input type="text" class="huh" name="limit4" /> 
<input type="text" class="huh" name="limit5" /> 
<input type="button" name="submit" value="Submit" onclick="checkFields();"/> 

Essayez ce code vous-même sur un html propre et vous verrez cela fonctionne réellement.

Modifier pour le code ajouté: Le code n'atteint pas la partie alerte car vous renvoyez déjà false ici: msg + = "Veuillez fournir au moins 1 date avant de soumettre. \ N"; return false; Ne retournez pas avant d'avoir affiché l'alerte

+0

travaillait. Je vais éditer mon code pour donner exactement ce que j'ai. –

+0

J'ai essayé de ne pas avoir à fournir le code original en raison de la coldfusion impliqué. Si vous vérifiez le lien, vous verrez que j'utilise le code indiqué dans votre exemple. Ne retourne pas un message. Ainsi, ne fonctionne pas. Je mets un retour false à la fin du formulaire submit, à des fins de débogage. –

+1

Le code n'atteint pas la partie 'alert' car vous renvoyez déjà' false' ici: 'msg + =" Veuillez fournir au moins 1 date avant de soumettre. \ N "; return false; 'Ne pas retourner avant d'avoir affiché l'alerte. – Randell

0

Vous pouvez avoir un indicateur de validation que vous définissez dans votre code et soumettre si c'est vrai. La première instruction de chacun va couper les espaces, puis vérifier la longueur de la valeur. Si c'est plus grand que 0 nous avons une valeur; Définissez l'indicateur valide sur true et renvoyez false pour arrêter les itérations.

+0

vous réalisez que vous obtiendrez le même résultat. –

+0

Même résultat? Vous voulez élaborer? – doomspork

+0

J'ai vérifié le code et l'ai testé, j'obtiens le bon résultat. Pouvez-vous expliquer pourquoi vous avez downvoted? – doomspork

0

Vous pouvez faire quelque chose comme ceci:

var valid = !!$.makeArray($('input.huh').map(function() { return this.value; })).join(''); 

Explication:

obtenir toutes les entrées, la carte du tableau pour obtenir juste les valeurs, de modifier le tableau à un tableau JS et rejoindre. Si au moins un a une valeur, la chaîne jointe ne sera pas vide.

Le !! convertit juste en un booléen (peut ou peut ne pas être nécessaire/souhaitable).

+0

Je ne veux vraiment pas essayer le tien en ce moment. C'est un peu trop pour quelque chose comme ça. Si tout le reste échoue, je vais essayer. –

+0

Vous ne savez pas ce que vous voulez dire ... c'est une ligne de code pour obtenir un booléen indiquant si vous avez des entrées avec des valeurs. Il s'agit simplement d'une version plus orientée vers la fonctionnalité de la boucle dans la réponse acceptée. – Ben

1

ici:

var found = false; 
$('.huh').each(function(){ 
    if($(this).val()){ 
     found = true; 
     return false; 
    } 
}); 
+0

Cela ne fonctionne même pas pour cela. Pas d'erreurs, mais pas de résultats. Vérifiez le lien que j'ai posté. La table est ... assez grande, mais elle est composée de .calc pour tout sauf les dates. Les dates se composent de .date-mask –

+0

@Michael, vous savez que vous êtes censé utiliser la variable 'found' après la boucle, non? – Randell

+0

Je pense que cela pourrait fonctionner. Je l'ai eu après la boucle en premier lieu cependant .. –

Questions connexes