Programmatic Control

Control the calendar using JavaScript methods and external UI elements.

Available Methods

Method Description
getValue(): string | number Get current date value
setValue(value: string | Date): void Set date value
reset(): void Clear value and close
setView(view: 'days' | 'months' | 'years'): void Change calendar view
next(): void Navigate to next month/year
prev(): void Navigate to previous month/year
open(): void Open calendar popup
close(): void Close calendar popup
isClosed(): boolean Check if calendar is closed
update(): void Accept current selection

Examples

Control Panel

Create custom navigation and view controls:

<html>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/style.min.css" />
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@calendarjs/ce/dist/index.min.js"></script>

<div class="control-panel">
    <button id="btn1">Previous</button>
    <button id="btn2">Today</button>
    <button id="btn3">Next</button>
    <button id="btn4">Days</button>
    <button id="btn5">Months</button>
    <button id="btn6">Years</button>
    <button id="btn7">Reset</button>
</div>

<div id='calendar'></div>
<div>Selected: <span id='display'>None</span></div>

<script>
const { Calendar } = calendarjs;

let display = document.getElementById('display');

const calendar = Calendar(document.getElementById('calendar'), {
    type: 'inline',
    value: new Date().toISOString(),
    onchange: function(self, value) {
        display.textContent = value || 'None';
    }
});

display.textContent = calendar.getValue();

document.getElementById('btn1').onclick = () => calendar.prev();
document.getElementById('btn2').onclick = () => calendar.setValue(new Date().toISOString());
document.getElementById('btn3').onclick = () => calendar.next();
document.getElementById('btn4').onclick = () => calendar.setView('days');
document.getElementById('btn5').onclick = () => calendar.setView('months');
document.getElementById('btn6').onclick = () => calendar.setView('years');
document.getElementById('btn7').onclick = () => calendar.reset();
</script>
</html>
import { Calendar } from '@calendarjs/ce';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const self = this;
    self.calendar = null;
    self.selected = 'None';

    const change = (el, value) => {
        self.selected = value || 'None';
    };

    const goToToday = () => {
        self.calendar.setValue(new Date().toISOString());
        self.calendar.setView('days');
    };

    return render => render`<div>
        <div>
            <button onclick="${() => self.calendar.prev()}">Previous</button>
            <button onclick="${goToToday}">Today</button>
            <button onclick="${() => self.calendar.next()}">Next</button>
            <button onclick="${() => self.calendar.setView('days')}">Days</button>
            <button onclick="${() => self.calendar.setView('months')}">Months</button>
            <button onclick="${() => self.calendar.setView('years')}">Years</button>
            <button onclick="${() => self.calendar.reset()}">Reset</button>
        </div>
        <Calendar type="inline" value="${new Date().toISOString()}" onchange="${change}" :ref="self.calendar" />
        <div>Selected: ${self.selected}</div>
    </div>`;
}
import { useRef, useState } from 'react';
import { Calendar } from '@calendarjs/ce/dist/react';
import '@calendarjs/ce/dist/style.css';

export default function App() {
    const calendarRef = useRef();
    const [selectedDate, setSelectedDate] = useState(new Date().toISOString().split('T')[0]);

    const goToToday = () => {
        calendarRef.current?.setValue(new Date());
        calendarRef.current?.setView('days');
    };

    return (
        <div>
            <div style={{ marginBottom: '15px', display: 'flex', gap: '10px' }}>
                <button onClick={() => calendarRef.current?.prev()}>Previous</button>
                <button onClick={goToToday}>Today</button>
                <button onClick={() => calendarRef.current?.next()}>Next</button>
                <button onClick={() => calendarRef.current?.setView('days')}>Days</button>
                <button onClick={() => calendarRef.current?.setView('months')}>Months</button>
                <button onClick={() => calendarRef.current?.setView('years')}>Years</button>
                <button onClick={() => calendarRef.current?.reset()}>Reset</button>
            </div>

            <Calendar
                ref={calendarRef}
                type="inline"
                value={new Date()}
                onchange={(self, value) => setSelectedDate(value)}
            />

            <div style={{ marginTop: '10px' }}>Selected: {selectedDate || 'None'}</div>
        </div>
    );
}
<template>
    <div>
        <div style="margin-bottom: 15px; display: flex; gap: 10px">
            <button @click="$refs.cal.current.prev()">Previous</button>
            <button @click="goToToday">Today</button>
            <button @click="$refs.cal.current.next()">Next</button>
            <button @click="$refs.cal.current.setView('days')">Days</button>
            <button @click="$refs.cal.current.setView('months')">Months</button>
            <button @click="$refs.cal.current.setView('years')">Years</button>
            <button @click="$refs.cal.current.reset()">Reset</button>
        </div>

        <Calendar ref="cal" type="inline" :value="new Date()" @onchange="handleChange" />

        <div style="margin-top: 10px">Selected: {{ selectedDate || 'None' }}</div>
    </div>
</template>

<script>
import { Calendar } from '@calendarjs/ce/dist/vue';
import '@calendarjs/ce/dist/style.css';

export default {
    components: { Calendar },
    data() {
        return { selectedDate: new Date().toISOString().split('T')[0] };
    },
    methods: {
        handleChange(self, value) {
            this.selectedDate = value;
        },
        goToToday() {
            this.$refs.cal.current.setValue(new Date());
            this.$refs.cal.current.setView('days');
        }
    }
}
</script>

Related