EDIT: Для тех, кто совершает ту же ошибку, я сделал это, задав этот вопрос, пожалуйста, ищите мой исправленный ответ, ниже которого демонстрируется МУЧНОЕ решение для этой проблемы.2 или 4 цифры Дата проверки с заменой строки Javascript
Попытка разрешить пользователю вводить либо 2-значный, либо 4-значный формат даты и разрешить как пройти проверку, но и автокорректировать двухзначный формат с помощью 4-значного эквивалента с предположением, что ведущие 2 цифры должны быть такими же, как и текущие ведущие 2 цифры.
У меня возникли проблемы с функцией javascript replace()
. Эта строка:
input.replace(enteredDate, year);
не работает должным образом. В контексте рамки spine.js
, которую я использую, значение input
относится к $(event.target)
и, как представляется, является правильным везде, где используется поле input
, где должна выполняться проверка. В конечном счете, я хочу заменить исходную строку, найденную в поле ввода, на полностью конкатенированную (которая еще не построена), но на данный момент, как я могу заменить содержимое input
(где вход var = $(event.target)
) с вар year
назначен здесь:
var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;
Вот полный код функции у меня есть до сих пор, который бросает следующее сообщение об ошибке в ссылке на .replace()
линии - Uncaught TypeError: Object [object Object] has no method 'replace'
validateDate: function(event) {
var input = $(event.target);
var enteredDate = input.val();
input.destroyValidationMessage();
var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{2})|(\d{4})$/;
var result = enteredDate.match(pattern);
if (result !== null) {
var month = parseInt(result[1], 10);
var day = parseInt(result[2], 10);
var year = parseInt(result[3], 10);
var unparsedYear = parseInt(result[3], 10);
var unparsedYearStrLength = unparsedYear.toString().length;
if (unparsedYearStrLength < 4) {
var currentYear = new Date().getFullYear().toString();
var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;
alert('Autocorrected year will be ' + year);
input.replace(enteredDate, year);
}
var date = new Date(year, month - 1, day);
var isValid = date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
} else {
input.createValidationMessage('Invalid Date');
input.addClass('invalid');
}
}
Если 'input' является элементом DOM, вы не хотите« заменять »содержимое, а' 'input.val (new_value)', а не фактический элемент 'input'? – Marc
Точно! Спасибо за это - вы должны опубликовать его в качестве ответа, чтобы вы могли получить репутацию. – Brian
см. Ниже. – Marc