Я пытаюсь написать плагин jQuery для отображения и ввода дат, используя в качестве отправной точки DatePicker из пользовательского интерфейса jQuery.
Вызов должен выглядеть следующим образом:
jQuery(document).ready(function() {
jQuery(document).find('input.mydatepicker').mydatepicker({
myformat : 'mm/dd/yy'
});
});
, так что любой ввод, имеющий class = "mydatepicker", будет иметь поведение mydatepicker.
Подвох в том, что я 'Мне бы хотелось, чтобы myformat
поддерживал различные форматы даты, однако всякий раз, когда я использую функцию val()
для получения / установки даты, я хочу, чтобы она была в формате iso8601 yyyy-mm-dd
.
, хотя я указал формат mm/dd/yy
выше для инициализации всех элементов, я хочу:
<input type="text" class="mydatepicker" id="myelement" value="02/23/2019">
var mydate = $('#myelement').val(); //mydate = '2019-02-23'
и
$('#myelement').val('2019-02-24');
<input type="text" class="mydatepicker" id="myelement" value="02/24/2019">
Используя методы, описанные здесь: Переопределить jQuery .val() функция? это то, что я пробовал:
(function($) {
// options & defaults
var defaultOptions = {
myformat : 'mm/dd/yy'
};
// attach jQuery.UI datepicker with specified options
$.fn.mydatepicker = function(options) {
options = $.extend({}, defaultOptions, options || {});
return this.each( function() {
var jq = $(this);
jq.addClass('plugin-mydatepicker').datepicker({
dateFormat: options.myformat,
prevText: '<i class="fa fa-angle-left"></i>',
nextText: '<i class="fa fa-angle-right"></i>',
constrainInput: true,
onSelect: function(date) {
}
});
});
}
// override val() to get/set in ISO8601 regardless of format
var _origVal = $.fn.val;
$.fn.val = function(value) {
if ( $(this).hasClass('plugin-mydatepicker') ) {
if (arguments.length >= 1) {
// setter
return $(this).val('x' + value);
}
else {
// getter
return 'x' + $(this).val();
}
}
return _origVal.apply(this, arguments);
};
})(jQuery);
Здесь происходит пара вещей:
- Я получаю ошибку "глубокая рекурсия"всякий раз, когда я вызываю val (), и я не знаю почему.Я неопытен в написании плагинов для jQuery.
- Я еще не выполнил преобразование myformat <-> iso8601, открыты для предложений о том, как это легко сделать.Практически говоря,
myformat
может быть ограничено мм / дд / гг и дд / мм / гг, там не нужно сходить с ума. - Чтобы пометить каждый элемент, к которому подключен плагин, я добавляю класс
plugin-mydatepicker
.Не уверен, что это лучший способ. - Я видел, как некоторые люди используют опцию
altFormat
в DatePicker.Меня не интересует этот подход, если я могу избежать его, поскольку он требует создания второго скрытого поля ввода и синхронизации между ними. - Я немного нервничаю по поводу переопределения функции
val()
;Я также был бы открыт для альтернативной функции get / set в плагине, такой как mydateVal()
- Я очень открыт для использования другого плагина, который делает это, который уже существует!Просто сам не нашел ...
Помощь?