2015-10-10 1 views
-1

C'est ce que j'ai essayé jusqu'ici mais toujours rien n'a changé. Je ne sais pas par où commencer, peut-être que quelqu'un de professionnel peut m'aider à passer au travers. Ceci est à des fins de validation.Comment montrer si la date est invalide en javascript

code:

$(function(){ 
var len = $('#groupContainer > div').length; 
var arr = []; 
for(var i=0; i < len; i++){ 

    var number = $('#number_' + [i + 1]); 
    var date = $('#date_' + [i + 1]); 
    var count = i + 1; 
    var message =""; 
    console.log(number) 

    var a = number.map(function(){ 
     return this.value; 
    }); 

    var b = date.map(function(){ 
     return this.value; 
    }); 

    var newObj = {number: a[0], date: b[0]} 
    arr.push(newObj); 

} 

var messages={}; 
var message=""; 
for(var c = 0; c < arr.length; c++) 
{   

    var groupMessage=false; 
    for(var d in arr[c]) 
    { 

     if(arr[c].hasOwnProperty(d)) 
     {  
      if(arr[c][d] == "") 
      { 
       if(messages[d]==undefined) { 
        messages[d]={groups:[]}; 
       } 
       messages[d].groups.push(c+1); 
      } 

     }    
    } 


} 

var lastgroup="" 

for(i in messages){ 
    m = messages[i];  
    var date = $('#date_' + i); 
    console.log(date) 
    if(m.groups.join(",")==lastgroup) { 
     message = message.replace("Group "+m.groups.join(",")+" ","Group "+m.groups.join(",")+":\n"); 
     if(m == "Date" && date.length != 8) 
     { message += i + ' is invalid!\n'; 
     } 
     message+=i+" is required!\n"; 

    }else { 
     message+="Group "+m.groups.join(",")+" "+i+" is required!\n"; 
    } 
    lastgroup = m.groups.join(","); 
} 
if(message) 
{ 
    alert(message); 
} 
}); 

Fiddle

Si tous les champs n'est pas rempli show:

Group 1, 2 Number is required! 
    Group 1, 2 Date is required! 

Date valide doit être mm/dd/yy

Et si la date n'est pas vraiment une date:

Group 1, 2 Date is invalid. 

Et si l'une des entrées est invalide.

Group 2 Date is invalid. 

Si tout le champ est rempli, ne faites rien.

+0

vous ne l'avez pas expliqué comment vous envisagez de valider les dates. –

+0

Je pense que vous pourriez mettre en place un problème plus petit mais bien défini similaire à ce que vous venez de poster. Et alors vous le résoudriez beaucoup plus facilement. Le code ci-dessus est juste un gâchis pour toute personne qui n'en sait pas assez sur votre tâche. – Microfed

Répondre

0

Je recommande de classer les objets par classe, par exemple: .txtNumber pour le numéro .txtDate pour la date

Vous pouvez utiliser regExpAllow pour l'événement et keypress regexpMatch pour la soumettre validation.

KeyPress Validation

$(document).on('keyup','.txtDate', function() { 
    var regExpAllow = new RegExp('[^0-9/]', 'g'); 
    $(this).val($(this).val().replace(regExpAllow,'')); 
}); 

$(document).on('keyup','.txtNumber', function() { 
    var regExpAllow = new RegExp('[^0-9.]', 'g'); 
    $(this).val($(this).val().replace(regExpAllow,'')); 
}); 

Envoyer validation

$(document).on('click','#btnSubmit', function() { 
    var regExpMatch = new RegExp('^[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}$'); 
    $('.txtDate').each(function() { 
     if ($(this).val().match(regExpMatch) != null) { 
      alert('Valid Date:'+$(this).val()); 
     } else { 
      alert('Invalid Date:'+$(this).val()); 
     } 
    }); 

    regExpMatch = new RegExp('^[0-9].[0-9]{3}$'); 
    $('.txtNumber').each(function() { 
     if ($(this).val().match(regExpMatch) != null) { 
      alert('Valid Number:'+$(this).val()); 
     } else { 
      alert('Invalid Number:'+$(this).val()); 
     } 
    });  
}); 

exemple jsFiddle: http://jsfiddle.net/BernardoBJ/o5dbnt51/4/

Avec cela, vous pouvez vérifier que les caractères peuvent être saisis et comment il sera votre résultat final (vous peut également valider de la même façon l'expression régulière des nombres si vous le souhaitez).

Implémente cette logique dans votre code.

note: obtient une valeur qui valide correctement les dates et le format de vos nombres.

0

Tout ce que la cartographie et looping est difficile à suivre ... boucle juste à travers les éléments une fois et faire face à chaque type dans la boucle

function validate(){ 
    var errors = false, 
     $cont = $('#groupContainer'); 
    // remove prior errors 
    $cont.find('.error').remove(); 
    // loop over inputs 
    $cont.find(':input').each(function() { 
     // use id to sort out type 
     var type = this.id.split('_')[0], 
      value = this.value, 
      msg = null; 

     if (!value) { 
      msg = 'This is required'; 
     } else if (type === 'date') { 
      if (/**** your invalid date method ***/) { 
       msg = 'Invalid Date'; 
      } 
     } else if (type === 'number') { 
      if (isNaN(+value)) { 
       msg = 'Not a number'; 
      } 
     } 
     if (msg) { 
      errors = true; 
      $(this).after('<span class="error">' + msg + '</span>') 
     } 

    });   
    return !errors;   
} 

alert(validate() ? 'Form is valid' :'Oooops! Not valid'); 

Il est à vous de faire la validation de la date pas de format a été donné

DEMO