Как сделать так, чтобы daterangepicker всегда оставался открытым

Может ли кто-нибудь помочь мне, как сделать так, чтобы daterangepicker всегда оставался открытым? URL-адрес daterangepicker: "http://www.daterangepicker.com/". Я не могу найти какой-либо вариант, чтобы сделать это возможным. может кто подскажет как сделать?

То, что я пробовал до сих пор,

HTML

<div class="row">
    <div id='divtest'>
        <input id="txtAssetCategoryBootstrapDateRangePicker" class="form-control" />
    </div>
</div>
<div class="clearfix"></div>

ЯВАСКРИПТ

 $('#txtAssetCategoryBootstrapDateRangePicker').daterangepicker({
        inline: true,
        singleDatePicker: false,
        startDate: moment().subtract(30, 'days'),
        endDate: moment(),
        minDate: moment().subtract(30, 'days'),
        maxDate: moment(),
        //ranges: { 'Today': [moment(), moment()-29] } 
    });

И мой документ.готов здесь

$(document).ready(function () {
     $('.daterangepicker.dropdown-menu.ltr.show-calendar.opensright').show();
});

В параметрах в библиотеке нет ничего доступного, что бы всегда отображало средство выбора диапазона дат в открытом режиме.

Пожалуйста, предложите.


person Chandan Kumar    schedule 14.09.2017    source источник


Ответы (5)


попробуйте добавить свойства alwaysShowCalendars:

$('#demo').daterangepicker({
    "alwaysShowCalendars": true,
    "startDate": "04/14/2018",
    "endDate": "04/20/2018"
}, function(start, end, label) {
  console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')');
});

person Syarif    schedule 20.04.2018

Вы можете написать этот фрагмент, я думаю, это будет работать. Поместите в функцию готовности документа:

$(".daterangepicker").show();
person shazz Abbasi    schedule 14.09.2017
comment
Извини. Попробовал с вашим ответом. Не повезло - person Chandan Kumar; 14.09.2017
comment
поместить перед функцией ur фактически по умолчанию свойство daterangepicker display:none; так что это будет работать, я пробовал $(.daterangepicker).show(); - person shazz Abbasi; 14.09.2017
comment
я не могу сделать это по умолчанию. потому что у меня есть три средства выбора диапазона дат в трех разных разделах. в третьем разделе daterangepicker я хочу быть открытым всегда - person Chandan Kumar; 14.09.2017
comment
используйте свойство nth-child css, это ваше мнение, но вы можете попробовать, если хотите - person shazz Abbasi; 14.09.2017
comment
я отредактировал свой вопрос, относящийся к третьему средству выбора диапазона дат. класс css для которого я упомянул. - person Chandan Kumar; 14.09.2017

Нет возможности всегда открывать datarangepicker, вам нужно переупорядочить последние две строки в daterangepicker.js в функцию hide:

        this.element.trigger('hide.daterangepicker', this);
        this.isShowing = false;

To

        this.isShowing = false;
        this.element.trigger('hide.daterangepicker', this);

А потом

$('#daterange-btn').on('hide.daterangepicker', function(ev, picker) {
    $('#daterange-btn').click();
});

$('#daterange-btn').click();

И если вы хотите оставить открытым только список дат диапазонов, вам нужно добавить следующие события:

$('#daterange-btn').on('apply.daterangepicker', function(ev, picker) {
    $('.calendar').hide();
});
$('.ranges ul li').on("click",function() {
    $('.calendar').show();
});
person Ahmad Zahabi    schedule 22.03.2019

Как упомянул @Ahmad Zahabi, нет встроенной опции, позволяющей постоянно открывать средство выбора диапазона дат. Однако, немного поработав с кодом, это возможно. Его решение не сработало для меня, так как оно испортило бы вызов document.click для других меню на странице. Вот несколько строк, которые необходимо обновить в файле daterangepicker.js:

Раздел externalClick — закомментировать this.hide(); строку следующим образом:

outsideClick: function(e) {
            var target = $(e.target);
            // if the page is clicked anywhere except within the daterangerpicker/button
            // itself then call this.hide()
            if (
                // ie modal dialog fix
                e.type == "focusin" ||
                target.closest(this.element).length ||
                target.closest(this.container).length ||
                target.closest('.calendar-table').length
                ) return;
            //this.hide();
            this.element.trigger('outsideClick.daterangepicker', this);
        },

Раздел clickCancel - закомментировать this.hide(); строку следующим образом:

clickCancel: function(e) {
            this.startDate = this.oldStartDate;
            this.endDate = this.oldEndDate;
            //this.hide();
            this.element.trigger('cancel.daterangepicker', this);
        },

Раздел ClickRange — закомментируйте this.clickApply(); и вместо этого добавьте this.updateCalendars() следующим образом:

clickRange: function(e) {
            var label = e.target.getAttribute('data-range-key');
            this.chosenLabel = label;
            if (label == this.locale.customRangeLabel) {
                this.showCalendars();
            } else {
                var dates = this.ranges[label];
                this.startDate = dates[0];
                this.endDate = dates[1];

                if (!this.timePicker) {
                    this.startDate.startOf('day');
                    this.endDate.endOf('day');
                }

                if (!this.alwaysShowCalendars)
                    this.hideCalendars();
                //this.clickApply();
                this.updateCalendars();
            }
        },

Затем, после инициализации средства выбора, вызовите щелчок по соответствующему полю ввода:

$("#daterange").click();

Назначьте событие щелчка, чтобы сделать то, что вы хотели бы сделать после нажатия кнопки «Применить»:

$([div housing your calendar]).find(".drp-buttons .applyBtn").click(function(){
    //my code picks the value from the calendar input field and passes it via the URL to reload the page. It could execute some AJAX call or whatever you desire it to do.
});

И, наконец, стоит отметить, что вышеуказанные изменения будут

  • всегда держать календарь открытым
  • не будет вызывать мерцание календаря, как если бы было использовано решение «щелкнуть поле ввода диапазона дат при закрытии календаря»
  • разрешить использование диапазонов дат и автоматически обновлять календарь при нажатии диапазона
  • сбросить дату до определенной даты по умолчанию при нажатии кнопки «Отмена», не закрывая календарь

Ничего не поделаешь. Надеюсь, это поможет кому-то там

person SimonDau    schedule 23.07.2020

Вы можете просто вызвать щелчок при вводе, в вашем случае:

$('#txtAssetCategoryBootstrapDateRangePicker').trigger('click')
person aPa    schedule 26.07.2020