2011-09-02 3 views
12

Je champ 5 texte en 5 lignes comme ça ..Texte validation du champ En utilisant Jquery

<div class="dt_distance_slab"> 
    <g:textField class ="number distanceSlab1" name="distanceSlabCost1" id = "distanceSlabCost1" value=""/> 
    </div> 
<div class="dt_distance_slab"> 
    <g:textField class ="number distanceSlab2" name="distanceSlabCost2" id = "distanceSlabCost2" value=""/> 
    </div> 
    <div class="dt_distance_slab"> 
    <g:textField class ="number distanceSlab3" name="distanceSlabCost3" id = "distanceSlabCost3" value=""/> 
    </div> 
    <div class="dt_distance_slab"> 
    <g:textField class ="number distanceSlab4" name="distanceSlabCost4" id = "distanceSlabCost4" value=""/> 
    </div> 
    <div class="dt_distance_slab"> 
    <g:textField class ="number distanceSlab5" name="distanceSlabCost5" id = "distanceSlabCost5" value=""/> 
    </div> 

ici tous les champs sont facultatifs .. Je veux mettre la validation comme si l'utilisateur veut saisir la valeur .. il ne peut pas sauter une ligne entre ... s'il veut saisir la valeur pour un champ texte, champ texte précédent doit avoir une valeur ..

validation se fera sur la soumission du formulaire

+0

Est-ce réellement le code HTML généré? On dirait que vous utilisez GWT ou quelque chose dans lequel le 'textField' sera plus tard remplacé par un HTML standard' '. –

+0

oui .. son Gsp (pages serveur groovy) – maaz

Répondre

4

Essayez avec ce code:

$(document).ready(function(){ 
    //assuming the validation fires on the click of a button 
    $("#btnSubmit").click(function(){ 
     //set valid variable to true 
     var blnIsValid = true; 
     //loop through each of the text boxes 
     $(":text[class^='number']").each(function(i){ 
      //start validating from the second text box 
      if(i > 0) { 
       var curTxtBox = $(this); 
       var prevTxtBox = $(":text[class^='number']:eq("+ (i-1) +")"); 
       if($.trim(curTxtBox.val()) != "" && $.trim(prevTxtBox.val()) == "") { 
        alert("Enter value for previous distance"); 
        //set focus on the text box 
        prevTxtBox.focus(); 
        //set valid variable to false 
        blnIsValid = false; 
        //exit the loop 
        return false; 
       } 
      } 
     }); 
     return blnIsValid; 
    }); 
}); 

Voici un exemple de travail dans jsFiddle

+1

Il est plus robuste et flexible pour déclencher la validation sur l'événement de soumission du formulaire, plutôt que l'événement de clic du bouton soumettre - il va gérer la validation, peu importe la forme soumis. – Beejamin

+0

@Beejamin, je n'ai jamais travaillé avec l'événement de soumission avant donc je ne peux pas dire grand chose sur le sujet. Pourriez-vous me diriger vers un article/une page qui les explique? Cela m'aiderait à comprendre les différences entre click et submit en termes de validation. –

+1

Fondamentalement, soumettez des travaux au niveau du formulaire - ainsi, quel que soit le formulaire soumis, que ce soit en cliquant sur un bouton, en appuyant sur un bouton, ou par programmation (par un autre morceau de javascript), l'événement se déclenchera. une opportunité de faire votre validation. Si vous attachez une validation à des événements de clic, vous devez vous assurer de toujours attacher à tous les boutons, et ne jamais soumettre le formulaire d'une autre manière. Vous pouvez toujours utiliser le même code, mais lancez-le avec l'événement submit à la place. – Beejamin

6

-vous obtenir une meilleure expérience utilisateur en empêchant l'entrée dans les champs qui ne sont pas une valeur précédente? Si tous les champs sauf le premier sont désactivés par défaut, vous pouvez activer le suivant sur l'événement de flou.

$('input:gt(1)').attr('disabled','disabled'); 
var fields = $('input'); 
$('input').blur(function(){ 
    var $this = $(this); 
    if($this.val() != ''){ 
    fields.eq($this.index()+1).attr('disabled',''); 
    } 
}); 
+0

Je cacherais effectivement les autres (sauf le très prochain qui contiendrait un texte descriptif qui disparaîtrait dès que l'utilisateur commencerait à taper (et ensuite la case suivante apparaîtrait). – jcuenod

2

emprunts fortement de la réponse de jSang et je ferais comme ceci:

$(document).ready(function(){ 
    //assuming the validation fires on the click of a button 
    $("#btnSubmit").click(function(){ 
     var haveEmpty = false; 
     var blnIsValid = true; 
     $(":text[class^='number']").each(function(i){ 
      if($(this).val() != "") 
      { 
       if(haveEmpty) 
       { 
        blnIsValid = false; 
        //need to do something to let the user know validation failed here 
       } 
      } 
      else 
       haveEmpty = true; 
     }); 
     return blnIsValid; 
    }); 
}); 
Questions connexes