Datepicker: Handle invalid values in value() and valueAsDate()

This commit is contained in:
TJ VanToll 2014-01-03 09:16:03 -05:00 committed by Scott González
parent b4fe65a134
commit feedc57486
2 changed files with 14 additions and 8 deletions

View File

@ -64,7 +64,7 @@ test( "open", function() {
});
test( "value", function() {
expect( 5 );
expect( 6 );
var input = $( "#datepicker" ).datepicker(),
picker = input.datepicker( "widget" ),
inline = $( "#inline" ).datepicker();
@ -75,19 +75,21 @@ test( "value", function() {
"first day marked as selected" );
equal( input.datepicker( "value" ), "1/1/14", "getter" );
input.val( "abc" );
equal( input.datepicker( "value" ), "abc",
"Invalid values should be returned without formatting." );
inline.datepicker( "value", "1/1/14" );
ok( inline.find( "a[data-timestamp]:first" ).hasClass( "ui-state-focus" ),
"first day marked as selected" );
equal( inline.datepicker( "value" ), "1/1/14", "getter" );
// TODO: Handle for invalid values.
input.datepicker( "destroy" );
inline.datepicker( "destroy" );
});
test( "valueAsDate", function() {
expect( 5 );
expect( 6 );
var input = $( "#datepicker" ).datepicker(),
picker = input.datepicker( "widget" ),
inline = $( "#inline" ).datepicker();
@ -99,14 +101,15 @@ test( "valueAsDate", function() {
TestHelpers.datepicker.equalsDate( input.datepicker( "valueAsDate" ),
new Date( 2014, 0, 1 ), "getter" );
input.val( "a/b/c" );
equal( input.datepicker( "valueAsDate" ), null, "Invalid dates return null" );
inline.datepicker( "valueAsDate", new Date( 2014, 0, 1 ) );
ok( inline.find( "a[data-timestamp]:first" ).hasClass( "ui-state-focus" ),
"first day marked as selected" );
TestHelpers.datepicker.equalsDate( inline.datepicker( "valueAsDate" ),
new Date( 2014, 0, 1 ), "getter" );
// TODO: Handle for invalid values.
input.datepicker( "destroy" );
inline.datepicker( "destroy" );
});

View File

@ -644,17 +644,20 @@ $.widget( "ui.datepicker", {
if ( arguments.length ) {
this._value( value );
} else {
return this.date.format();
return this.isValid() ? this.date.format() : this.element.val();
}
},
valueAsDate: function( value ) {
if ( arguments.length ) {
this._value( value );
} else {
return this.date.date();
return this.isValid() ? this.date.date() : null;
}
},
isValid: function() {
if ( this.inline ) {
return true;
}
return Globalize.parseDate( this.element.val(), this.options.dateFormat ) !== null;
},
_destroy: function() {