This plugin provides a widget for date entry and validation. Unlike a 'date picker' the widget is well suited to keyboard-only data entry tasks.
The datetextentry
widget provides for reliable date
entry without the need for a date-picker. While convenient for
selecting dates close to 'today' (e.g.: setting up an appointment
for next Tuesday), date-pickers are not suitable for all date entry
tasks. For example, when entering your date of birth, a
date-picker requires you to page through months and years of dates
- the older you are, the more times you'll have to click. This can
be very frustrating since you know your date of birth -
you just want to type it in. The datetextentry
widget allows you to do exactly that, while removing any
ambiguity about expected field order and separators.
You provide a plain <input type="text">
form
element and the plugin will replace it with a 3-field widget. When
the form is submitted, a single value will be posted to the
backend. Dates are translated to and from ISO standard YYYY-MM-DD
format. The order of the input fields can be customised for your
local conventions.
A typical text entry box might look like this:
With the datetextentry
plugin applied, it might
look like this:
The widget provides the following functionality (try out the example above):
The examples directory includes some demos to get you started.
The plugin is dual-licensed under the MIT and GPL licences.
When the datetextentry
function is called, you can
provide option name/value pairs as an object literal like this:
$(selector).datetextentry({opt1: value1, opt2: value2});
Name | Description |
---|---|
add_century |
When a 2-digit year is entered the add_century
function upgrades it to 4 digits by simply adding 2000. You
can use this option to provide an alternative function, that
takes a number in the range 10-99 and returns a number in the
range 1000-9999.
|
custom_validation |
Use this option to supply a function for applying arbitrary
validation rules. The function will be passed an object literal
with |
errorbox_x |
When an invalid value is entered, a message will be displayed
in an 'error box' to the right of the widget. Use the
|
errorbox_y |
See errorbox_x. |
field_hint_text_day |
Hint text to display in an empty day field. Default: 'DD' |
field_hint_text_month |
Hint text to display in an empty month field. Default: 'MM' |
field_hint_text_year |
Hint text to display in an empty year field. Default: 'YYYY' |
field_order |
A string comprising the letter 'D', 'M' and 'Y' in the order you wish the day, month and year fields to be displayed. |
field_tip_text_day |
Tooltip text to display beneath the day field when it has the focus. Default: 'Day' |
field_tip_text_month |
Tooltip text to display beneath the month field when it has the focus. Default: 'Month' |
field_tip_text_year |
Tooltip text to display beneath the year field when it has the focus. Default: 'Year' |
field_auto_focus_day |
Descriptive text substituted into aria-label when focus is automatically shifted to a field to assist screen reader users in understanding what occurred. Default: 'Focus has moved to day' |
field_auto_focus_month |
Descriptive text substituted into aria-label when focus is automatically shifted to a field to assist screen reader users in understanding what occurred. Default: 'Focus has moved to month' |
field_auto_focus_year |
Descriptive text substituted into aria-label when focus is automatically shifted to a field to assist screen reader users in understanding what occurred. Default: 'Focus has moved to year' |
field_width_day |
Proportion of the overall width of the widget that should be used for the day field. Default: 40. The values specified are not absolute pixel values. Instead, the widget size is organised to take up the same space as the input box it replaces. Inside the widget, the field sizes are allocated based on the relative proportions specified. |
field_width_month |
Proportion of the overall width of the widget that should be used for the month field. Default: 40. |
field_width_sep |
Proportion of the overall width of the widget that should be used for each of the separators. Default: 4. |
field_width_year |
Proportion of the overall width of the widget that should be used for the year field. Default: 60. |
format_date |
When a valid date is entered into the three fields, a formatted date string will be saved in the original text field, to be submitted to the backend server. By default the date will be in ISO-standard YYYY-MM-DD format. Using this option, you can provide a function that accepts
an object of the form |
human_format_date |
This option is similar to format_date but allows you to override the default format (DD/MM/YYYY) used to display dates in the error box (for example in "Date must not be earlier than 01/01/1970"). |
is_required |
A boolean value indicating whether this is a required field. If this option is true, moving focus away from the widget without entering a complete and valid date will trigger a validation error.
You can override the default message text for the 'required field' error by supplying a value for E_REQUIRED_FIELD. |
max_date |
If this option is provided, a date greater than the supplied value will be rejected.
The value can be supplied as an ISO date string (which will be parsed using the parse_date function; or as a function which returns an object literal of the form expected by format_date. |
max_year |
If this option is provided, a year value greater than the supplied value will be rejected. |
min_date |
If this option is provided, a date less than the supplied value will be rejected.
The value can be supplied as an ISO date string (which will be parsed using the parse_date function); or as a function which returns an object literal of the form expected by format_date. |
min_year |
If this option is provided, a year value less than the supplied value will be rejected. |
on_blur |
If you supply a callback function, it will be called when
the input focus leaves the date widget. Within your callback
function you can call Note: this function uses a delay to filter out the noise of focus-out from one date sub-field and focus-in to the next. Therefore the 'on_blur' callback will usually be called after the 'focus' event fires on the next form element. |
on_change |
If you supply a callback function, it will be called when the
contents of the date entry boxes pass validation. The function
will be passed a single argument - a date string from
Note: this is quite a 'noisy' function - it will be called for every keypress when a valid date results. Also note, it will not be called when the date is changed to an invalid value. |
on_error |
If you supply a callback function, it will be called when the error box is updated. A single argument will be passed to the function. The empty string if the error condition is cleared or the text of the error otherwise. |
parse_date |
You can override the default date parsing function which is
used to parse the default value in the base <input>
element's value attribute.
|
separator |
The character which should be displayed in the widget between the input fields, Default: '/'. |
show_errors |
A boolean value controlling whether error text will be displayed next to the date widget when invalid input is detected. This option would typically be set to false when the on_error option is used for customised error message presentation. Default: true. |
show_hints |
A boolean value controlling whether hint text will be displayed in empty fields which do not have the input focus. Default: true. |
show_tooltips |
A boolean value controlling whether a field name tooltip will be displayed beneath the fields with the current input focus. Default: true. |
tooltip_x |
Horizontal offset in pixels for the tooltip relative to the current input field. |
tooltip_y |
Vertical offset in pixels for the tooltip relative to the current input field. |
The text of the error messages can be customised by providing alternative message text as options.
After the widget has been initialised, you can reference it again using the same selector and call a method like this:
$(selector).datetextentry('method-name', args);
Name | Description |
---|---|
clear |
Discard the current contents of all the fields, e.g.: $(selector).datetextentry('clear'); |
destroy |
Removes the datetextentry functionality and returns the element back to its original state, e.g.: $(selector).datetextentry('destroy'); |
focus |
Move the input focus to the first field, e.g.: $(selector).datetextentry('focus'); |
set_date |
Provide a new date value, which will be parsed by parse_date and used to populate the three date entry fields, e.g.: $(selector).datetextentry('set_date', '2005-12-31'); |
set_error |
Provide a specific error message. This might be used, for example, by a form's onsubmit handler to alert about a required field, or to indicate why the entered value is not valid when considered with other field values, e.g.: $(selector).datetextentry('set_error', 'End date must be after start date'); |
set_readonly |
Set the date entry widget to read-only mode or back to normal read/write mode, e.g.: $(selector).datetextentry('set_readonly', true); |
Copyright © 2010-2017 Grant McLean