2010-09-21 27 views
10

Im usando il plugin jQuery validate e mi chiedevo se c'era un modo per convalidare se la data inserita in un campo era una data come aaaa-mm-gg E la data cade tra 29 Nov 2010 - 15 dic 2010jQuery Validate (Intervallo di date)

Sono abbastanza nuovo per jQuery, quindi se c'è una risposta per favore stupisci la risposta il più possibile così posso passare attraverso di essa. Grazie mille per qualsiasi/tutti i suggerimenti

risposta

7

Non ho mai usato il plugin di convalida, ma uno sguardo attraverso l'API suggeriscono che qualcosa di simile potrebbe funzionare:

$.validator.addMethod('daterange', function(value, element) { 
    if (this.optional(element)) { 
     return true; 
    } 

    var startDate = Date.parse('2010-11-29'), 
     endDate = Date.parse('2010-12-15'), 
     enteredDate = Date.parse(value); 

    if (isNan(enteredDate)) { 
     return false; 
    } 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}); 

Si potrebbe quindi, credo, bisogno per aggiungere la classe daterange l'elemento appropriato.

5

La risposta di lonesomeday è piuttosto ravvicinata, con alcune modifiche. Avrei finito il codice come segue:

if(isNaN(enteredDate)) return false; 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}, "Please specify a date between 2010-11-29 and 2010-12-15"); 

questo risolve la funzione isNaN, e fornisce anche un messaggio di errore per gli utenti in modo che sappiano quello che stai cercando.

+0

Emily, correggi la data nel messaggio di convalida, ad esempio 2010-12-15

9

Se si desidera una funzione riutilizzabile, si potrebbe estendere Emily e le risposte di lonesomeday per consentire un argomento da fornire:

$.validator.addMethod('daterange', function(value, element, arg) { 
    // Same as above 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value);  
    // Same as below 

}, $.validator.format("Please specify a date between {0} and {1}.")) 

Vedi l'source del metodo jQuery convalida range per un esempio.

1

Effettuato un paio di piccole correzioni nel codice di Connor.

Il codice di lavoro risultante è:

$.validator.addMethod('daterange', function(value, element, arg) { 
    if (this.optional(element) && !value) { 
     return true; 
    } 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value); 

    if (isNaN(enteredDate)) { 
     return false; 
    } 

    return ((isNaN(startDate) || (startDate <= enteredDate)) && 
      (isNaN(endDate) || (enteredDate <= endDate))); 


    }, $.validator.format("Please specify a date between {0} and {1}.")); 

quindi utilizzarlo in questo modo:

$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']}); 
1

Tenere i vostri cavalli, ragazzi! :)

Non dimenticare che Date.parse non può funzionare correttamente con diverse impostazioni internazionali, ma analizza solo il formato di data specifico.

Se si utilizzano vari formati di data (specifici della lingua), è meglio attenersi alla gestione della data di jquery datepicker.

Quindi, supponendo di aver caricato l'oggetto jquery datepicker specifico della cultura specifico (ad esempio, jquery.ui.datepicker-nb-NO.js, dove il formato della data è GG.MM.aaaa e non viene analizzato per Data. analizzare) e inizializzata esso, l'approccio corretto è:

$.validator.addMethod('dateRange', function (value, element, parameterValue) { 
     if (this.optional(element) && !value) { 
      return true; 
     } 
     var dateFormat = $(element).datepicker('option', 'dateFormat'); 
     try { 
      var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime(); 
      var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime(); 
      var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime(); 
      return (startDate <= enteredDate) && (enteredDate <= endDate); 
     } catch (error) { 
      return true; 
     } 
    }); 

ho messo parsedate roba dentro blocco try, perché non c'è modo normale per capire se la data è stato analizzato correttamente.

Problemi correlati