From 8e2e265877f0f53514abb26befa26b8684c7174d Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sat, 7 Mar 2015 16:14:23 -0500 Subject: [PATCH] CRM-16019 - Add rudimentary validation to date input --- js/Common.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/js/Common.js b/js/Common.js index c6d46e9aac..a2cc203d01 100644 --- a/js/Common.js +++ b/js/Common.js @@ -610,6 +610,15 @@ CRM.strings = CRM.strings || {}; settings.changeYear = _.includes('y', settings.dateFormat); $dateField.datepicker(settings).change(updateDataField); } + // Rudimentary validation. TODO: Roll into use of jQUery validate and ui.datepicker.validation + function isValidDate() { + try { + $.datepicker.parseDate(settings.dateFormat, $dateField.val()); + return true; + } catch (e) { + return false; + } + } function updateInputFields(e, context) { var val = $dataField.val(), time = null; @@ -629,10 +638,16 @@ CRM.strings = CRM.strings || {}; $clearLink.css('visibility', val ? 'visible' : 'hidden'); } function updateDataField(e, context) { + // The crmClear event wipes all the field values anyway, so no need to respond if (context !== 'crmClear') { var val = ''; if ($dateField.val()) { - val = $.datepicker.formatDate('yy-mm-dd', $dateField.datepicker('getDate')); + if (isValidDate()) { + val = $.datepicker.formatDate('yy-mm-dd', $dateField.datepicker('getDate')); + $dateField.removeClass('crm-error'); + } else { + $dateField.addClass('crm-error'); + } } if ($timeField.val()) { val += (val ? ' ' : '') + $timeField.timeEntry('getTime').toTimeString().substr(0, 8); -- 2.25.1