Здравствуйте! <br/> Можете ли вы подсказать, возможно ли изменить настройки дейтпикера в ответ на определенные события? <br/> <a href="https://www.daterangepicker.com/#events" rel="nofollow">https://www.daterangepicker.com/#events</a> - это ссылка на дейтпикер. <br/> Например, мне нужно изменить настройку opens во время отображения календаря (событие showCalendar.daterangepicker). <br/> В качестве примера, вот код: <br/> <pre><code class="javascript">$(function () { $(g('<?= $id . '_interval' ?>')).daterangepicker({ autoUpdateInput: false, showDropdowns: true, autoApply: true, locale: { monthNames: moment.months() } }).on('showCalendar.daterangepicker', (ev, picker) => { picker.opens = 'left'; console.log(picker); }); });</code></pre> <br/> <br/> Предполагается, что это должно изменить настройку opens на 'left', так как по умолчанию она установлена на 'right'. Однако при выводе переменной "picker" в консоль её параметр действительно отображает значение 'left'. <br/>
Да, вы правы, действительно можно изменить настройки Date Range Picker на JavaScript в ответ на определенные события. Однако в вашем случае изменение свойства `opens` не будет иметь эффекта, поскольку это свойство не применяется на лету для уже открытого календаря. Свойство `opens` используется для определения, с какой стороны открывается календарь (например, 'left' или 'right'). Чтобы применить изменения, вам необходимо полностью переинициализировать пикер или закрыть его и открыть заново с новыми настройками. Вот пример, как можно изменить настройки Date Range Picker при срабатывании события, закрыв и открыв календарь заново: ```javascript $(function () { var $input = $(g('<?= $id . '_interval' ?>')); var picker = $input.daterangepicker({ autoUpdateInput: false, showDropdowns: true, autoApply: true, locale: { monthNames: moment.months() } }); $input.on('showCalendar.daterangepicker', function (ev, picker) { // Закрываем текущий календарь picker.hide(); // Изменяем настройку opens picker.opens = 'left'; // Переинициализируем пипкер с новыми настройками picker.setOptions({ opens: picker.opens }); // Открываем его вновь picker.show(); }); }); ``` В этом примере мы сначала скрываем текущий календарь с помощью `picker.hide()`, потом изменяем значение свойства `opens`, переинициализируем Date Range Picker с новым значением и снова открываем его с помощью `picker.show()`. Обратите внимание, что метод `setOptions()` может не поддерживаться в старых версиях Date Range Picker, тогда вам может понадобиться переинициализация пипкера с новыми настройками заново. StackOverflow и документация к библиотеке будут хорошими источниками информации при решении подобных вопросов.
А у Вас как задача-то? Просто поменять расположение стрелки? Если да, то можно просто классы поменять. Собсно, есть opensright и opensleft , которые отвечают за расположение этой стрелки:
$('.daterangepicker').addClass('opensleft').removeClass('opensright'); // $('.daterangepicker').addClass('opensright').removeClass('opensleft');
Если у Вас какая-то более сложная логика отображения стрелки, то у инстанса picker'а есть методы:
- updateElement
- updateCalendars
- show
- hide
Думаю, что можно попробовать вызвать метод обновления picker'а после изменения настроек (скрыть/открыть опционально)
Ну, или на крайний случай просто удалить picker ( picker.remove() ) и инициализировать его с новыми опциями (написать отдельную функцию для инициализации, которая будет принимать опции)