Как мне программно изменить дату выбора даты в любое время?

#jquery #anytime

#jquery #в любое время

Вопрос:

Я пересмотрел все вопросы и ответы Anytime datepicker в Stackoverflow безрезультатно. Как мне изменить, не на этапе инициализации, дату средства выбора?

Пример использования: я хочу, чтобы иногда пользователь выбирал дату, а иногда и внешнее событие для запуска и обновления текущего значения средства выбора.

Ответ №1:

Вы хотите обновить значение средства выбора (другими словами, какие кнопки выделены) или значение поля формы? Если последнее, то вы можете просто присвоить полю новое значение, используя типичные команды JavaScript. В следующий раз, когда пользователь нажмет на поле, средство выбора будет установлено в соответствии со значением.

Единственное предостережение заключается в том, что установленное вами значение должно быть в том же формате, который вы указали для средства выбора. Если вы используете Date объекты JavaScript, вы можете преобразовать его в правильный формат, используя новый AnyTime.Converter() , инициализированный с той же строкой формата, и вызвать метод конвертера format() для преобразования вашего Date в строку.

Например:

 var FMT = "%e-%b-%Y";
var conv = new AnyTime.Converter({format:FMT});
$("#field").AnyTime_picker({format:FMT});
...
var newVal = new Date(...);
$('#field').val( conv.format(newVal) );
  

Если вы не используете объект Date, просто будьте на 100% уверены, что вы правильно форматируете строку!

Теперь предположим, что вы действительно хотите изменить то, что показывает средство выбора (например, у вас есть средство выбора, placement:'inline' и вы хотите, чтобы средство выбора отражало новое значение в поле):

В этом случае вам придется переместить одну строку кода в anytime.js , и добавьте еще одну строку кода в ваш JavaScript:

Во-первых, в строке 84 anytime.js , вы должны найти:

 var __pickers = [];
  

Несколькими строками выше вы должны найти:

 (function($)
  

Переместите эту вторую строку чуть выше первой, чтобы в итоге получить:

 var __pickers = [];
(function($)
  

Затем, в вашем собственном коде, после того, как вы установите для поля формы новое значение, вызовите __pickers[ id ].showPkr() для идентификатора вашего поля формы. Например, продолжая мой самый ранний пример, добавьте следующую последнюю строку:

 __pickers['field'].showPkr();
  

Конечно, теперь, когда вы предоставили __pickers[] в качестве глобальной переменной, убедитесь, что вы не используете это же имя для каких-либо других целей в другом месте, иначе имена будут конфликтовать.

Комментарии:

1. Эндрю: согласны ли вы, что такого рода функциональность должна быть частью набора функций вашего виджета?

2. Удивительно, но вы первый, кто попросил об этом! В любом случае я (медленно) работаю над совершенно новой библиотекой замены и постараюсь включить эту функциональность.