Calendar for jQuery and jQuery Mobile

light
dark

Change the theme setting here

Calendar - Mobile display modes

Change demo
Mobile display modes

Different display modes can be used for mobile and desktop. On mobile, the calendar can be rendered at the top or bottom of the screen, in the center of the screen, anchored to an input or any object for that matter and it can also be embedded in any inline content.

Interested in desktop usage?  Check out the next example →
// Use the settings object to change the theme
mobiscroll.settings = {
    lang: '',
    theme: ''
};

$(function () {

    $('#demo-bottom').mobiscroll().calendar({
        display: 'bottom'
    });

    $('#demo-top').mobiscroll().calendar({
        display: 'top'
    });

    $('#demo-center').mobiscroll().calendar({
        display: 'center'
    });

    $('#demo-bubble').mobiscroll().calendar({
        display: 'bubble'
    });

    $('#demo-fullscreen').mobiscroll().calendar({
        display: 'center',
        layout: 'liquid'
    });

    $('#demo-inline').mobiscroll().calendar({
        display: 'inline',
        layout: 'liquid'
    });

});
<div style="display:none" mbsc-form>
    <div class="mbsc-form-group">
        <div class="mbsc-form-group-title">Try different display modes</div>
        <label>
            Bottom
            <input id="demo-bottom" placeholder="Please Select..." />
        </label>
        <label>
            Top
            <input id="demo-top" type="text" placeholder="Please Select..." />
        </label>
        <label>
            Center
            <input id="demo-center" type="text" placeholder="Please Select..." />
        </label>
        <label>
            Bubble
            <input id="demo-bubble" type="text" placeholder="Please Select..." />
        </label>
        <label>
            Fullscreen
            <input id="demo-fullscreen" type="text" placeholder="Please Select..." />
        </label>
    </div>
    <div class="mbsc-form-group mbsc-padding">
        <p class="mbsc-thin">With inline display you can embed the calendar component in almost any markup or form.</p>
    </div>
    <div class="mbsc-form-group">
        <div class="mbsc-form-group-title">Embedded calendar scroller</div>
        <div id="demo-inline"></div>
    </div>
</div>

Calendar - Booking

Change demo
Booking
Advanced Calendar booking demo with unavailable, disabled days and free selection for the next 6 months.
$(function () {
    var booked = [],
        invalid = ['w1'],
        now = new Date(),
        min = new Date(now.getFullYear(), now.getMonth(), now.getDate()),
        max = new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()),
        firstMonth = generateMonthEvents(now.getFullYear(), now.getMonth());

    booked = firstMonth.events;
    invalid = invalid.concat(firstMonth.invalid);

    $('#demo').mobiscroll().calendar({
        theme: '',
        lang: '',
        controls: ['calendar'],
        min: min,
        max: max,
        invalid: invalid,
        events: booked,
        onMonthLoading: function (event, inst) {
            var newItems,
                isEventsLoaded = (inst.settings.events).filter(function (v) {
                    return v.d.getMonth() == event.month + 1;
                }).length;

            if (!isEventsLoaded) {
                newItems = generateMonthEvents(event.year, event.month + 1);
                inst.settings.events = inst.settings.events.concat(newItems.events);
                inst.settings.invalid = inst.settings.invalid.concat(newItems.invalid);
                inst.redraw();
            }
        }
    });

    function getRandomDay() {
        return Math.floor(Math.random() * 100) % 28 + 1;
    }

    function generateMonthEvents(year, month) {
        var isDisabled,
            tempDay,
            invalid = [],
            events = [],
            disabledDays = [getRandomDay(), getRandomDay(), getRandomDay(), getRandomDay()];

        for (var i = 1; i <= new Date(year, month + 1, 0).getDate(); ++i) {
            tempDay = new Date(year, month, i, now.getHours(), now.getMinutes(), now.getSeconds());
            if (tempDay.getTime() >= now.getTime() && tempDay.getTime() <= max.getTime()) {
                isDisabled = disabledDays.indexOf(i) !== -1 || tempDay.getDay() == 1;
                if (isDisabled) {
                    invalid.push(tempDay);
                }
                events.push({
                    d: tempDay,
                    text: isDisabled ? (tempDay.getDay() == 1 ? 'CLOSED' : 'FULL') : Math.round(Math.random() * 10) % 5 + 2 + ' SPOTS',
                    color: isDisabled ? '#ccc' : '#8ada8a'
                });
            }
        }

        return {
            events: events,
            invalid: invalid
        };
    }

});
<input id="demo" placeholder="Please Select..." />

Calendar - Marked days

Change demo
Marked days

When using marked days, users might be interested to see what each dot means. You can place a listview below for describing what everything means.

Looking for more options to mark days?  See how to add dots, colors and labels →
$(function () {
    var now = new Date();

    $('#demo').mobiscroll().calendar({
        display: 'inline',
        layout: 'liquid',
        theme: '',
        lang: '',
        markedDisplay: 'bottom',
        marked: [{
            d: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 6),
            color: 'rgb(28, 161, 227)'
        }, {
            d: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 8),
            color: 'rgb(28, 161, 227)'
        }, {
            d: new Date(now.getFullYear(), now.getMonth(), now.getDate() + 9),
            color: 'rgb(28, 161, 227)'
        }, {
            d: new Date(now.getFullYear(), now.getMonth() + 1, 15),
            color: 'rgb(28, 161, 227)'
        }, {
            d: '11/30',
            color: 'rgb(163, 0, 38)'
        }, {
            d: '5/23',
            color: 'rgb(163, 0, 38)'
        }, {
            d: '3/12',
            color: 'rgb(163, 0, 38)'
        }, {
            d: '14',
            color: 'rgb(204,204,0)'
        }, {
            d: 'w5',
            color: 'rgb(34, 139, 34)'
        }, {
            d: '1/1',
            color: 'rgb(250,104,0)'
        }, {
            d: '1/2',
            color: 'rgb(250,104,0)'
        }, {
            d: '6/4',
            color: 'rgb(250,104,0)'
        }, {
            d: '8/4',
            color: 'rgb(250,104,0)'
        }, {
            d: '12/25',
            color: 'rgb(250,104,0)'
        }, {
            d: '12/26',
            color: 'rgb(250,104,0)'
        }]
    });

    $('.md-marked-list').mobiscroll().listview({
        theme: '',
        lang: '',
        swipe: false
    });

});
<div class="md-marked">
    <div id="demo" placeholder="Please Select..."></div>

    <ul class="md-marked-list" style="display:none">
        <li>
            <span class="md-marked-points md-ponts-type1"></span> Garbage collection
        </li>
        <li>
            <span class="md-marked-points md-ponts-type2"></span> Special events
        </li>
        <li>
            <span class="md-marked-points md-ponts-type3"></span> Town council meeting
        </li>
        <li>
            <span class="md-marked-points md-ponts-type4"></span> Town hall closed
        </li>
        <li>
            <span class="md-marked-points md-ponts-type5"></span> National holidays
        </li>
    </ul>
</div>
.demo-marked {
    padding: 0!important;
}

.md-marked .md-marked-points {
    display: inline-block;
    vertical-align: middle;
    width: 7px;
    height: 7px;
    margin: 0 4px 0 0;
    border-radius: 7px;
    background: #aaa;
}

.md-marked .md-ponts-type1 {
    background: rgb(34, 139, 34);
}

.md-marked .md-ponts-type2 {
    background: rgb(163, 0, 38);
}

.md-marked .md-ponts-type3 {
    background: rgb(204, 204, 0);
}

.md-marked .md-ponts-type4 {
    background: rgb(28, 161, 227);
}

.md-marked .md-ponts-type5 {
    background: rgb(250, 104, 0);
}

.md-i-hide {
    display: none;
}

Calendar - RTL Support

Change demo
RTL Support

Shipping with full RTL support, choose left-to-right or right-to-left with the rtl setting. The value is inherited from the localization settings and can be manually overriden by explicitly setting it true or false.

Learn more about RTL and accessibility  Browse the documentation →
$(function () {

    $('#demo').mobiscroll().calendar({
        theme: '',
        lang: '',
        rtl: true
    });

});
<input id="demo" placeholder="Please Select..." />

Calendar - Event hooks

Change demo
Event hooks

The calendar ships with different event hooks for deep customization. Events are triggered through the lifecycle of the component where you can tie in custom functionality and code. While users interact with the UI events like onChange, onSet, onInit ... will be triggered. Interact with the example and check the event log for the output.

For a complete list of events go to the documentation  See available lifecycle events →
Clear event log
EVENTS FIRED: 
$(function () {

    $('#demo').mobiscroll().calendar({
        theme: '',
        lang: '',
        controls: ['calendar', 'time'],
        onInit: function (event, inst) {
            // Your custom event handler goes here
        },
        onMarkupReady: function (event, inst) {
            // Your custom event handler goes here
        },
        onBeforeShow: function (event, inst) {
            // Your custom event handler goes here
        },
        onPosition: function (event, inst) {
            // Your custom event handler goes here
        },
        onShow: function (event, inst) {
            // Your custom event handler goes here
        },
        onSet: function (event, inst) {
            // Your custom event handler goes here
        },
        onItemTap: function (event, inst) {
            // Your custom event handler goes here
        },
        onDestroy: function (event, inst) {
            // Your custom event handler goes here
        },
        onClose: function (event, inst) {
            // Your custom event handler goes here
        },
        onChange: function (event, inst) {
            // Your custom event handler goes here
        },
        onCancel: function (event, inst) {
            // Your custom event handler goes here
        },
        onBeforeClose: function (event, inst) {
            // Your custom event handler goes here
        },
        onClear: function (event, inst) {
            // Your custom event handler goes here
        },
        onDayChange: function (event, inst) {
            // Your custom event handler goes here
        },
        onMonthChange: function (event, inst) {
            // Your custom event handler goes here
        },
        onMonthLoaded: function (event, inst) {
            // Your custom event handler goes here
        },
        onMonthLoading: function (event, inst) {
            // Your custom event handler goes here
        },
        onSetDate: function (event, inst) {
            // Your custom event handler goes here
        },
        onTabChange: function (event, inst) {
            // Your custom event handler goes here
        }
    });
});
<input id="demo" placeholder="Please Select..." />

Looking for something you didn't see or have a sales question?
Ask us about it, we're here to help.

Component license


Purchase component licenses if you are looking for specific funcionality.

Total


All features will be included with the license.

Buy component license

Framework license


Get all 36 components, including with the Framework license.



Mobiscroll for JQuery $595


Use Javascript when building with plain and simple JS. Use jQuery when you have jQuery already included or if you are building with jQuery Mobile. Use AngularJS when building with Angular 1.x or Ionic 1. Use Angular when building with Angular 2/4/5/6/7 or Ionic 2/3/4. Use it when you are building your app or website with React.


Buy framework license
See other licensing options

Framework license


Get all 36 components, including with the Framework license.



Mobiscroll for JQuery $595


  • Use it when building with plain and simple JS
  • Compatible with vanilla JS app or frameworks like Vue
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with jQuery and jQuery Mobile
  • Enjoy the familiar API if you already use jQuery
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular JS and Ionic 1
  • For web and mobile apps based on Angular 1.x
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular 2/4/5/6/7 and Ionic 2/3/4
  • Visual Studio and VS Code integration
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it when building with React JS
  • Collection of UI components for web and mobile
  • Royalty-free commercial usage
  • Technical support is included with the license
Buy framework license
See other licensing options

Framework license


Select the development framework you are using. Get all 36 components with the license.

Mobiscroll for Javascript
Mobiscroll for jQuery
Mobiscroll for React
Mobiscroll for Angular
Mobiscroll for Angular JS
  • Use it when building with plain and simple JS
  • Compatible with vanilla JS app or frameworks like Vue
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with jQuery and jQuery Mobile
  • Enjoy the familiar API if you already use jQuery
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular JS and Ionic 1
  • For web and mobile apps based on Angular 1.x
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it with Angular 2/4/5/6/7 and Ionic 2/3/4
  • Visual Studio and VS Code integration
  • Royalty-free commercial usage
  • Technical support is included with the license
  • Use it when building with React JS
  • Collection of UI components for web and mobile
  • Royalty-free commercial usage
  • Technical support is included with the license
Buy framework license
See other licensing options

Select the framework you are interested in

Javascript
jQuery
Angular
Angular JS
React

Use Javascript when building with plain and simple JS.

Use jQuery when you have jQuery already included or if you are building with jQuery Mobile.

Use AngularJS when building with Angular 1.x or Ionic 1.

Use Angular when building with Angular 2/4/5/6/7 or Ionic 2/3/4.

Use it when you are building your app or website with React.

Do you need additional support seats?

The framework license comes with one support seat. ( +$50/seat )

Add the source code?

Price
Buy now
Customize & try demos locally
Sign in or start your free trial

What framework are you using?

Javascript
jQuery
AngularJS
Angular
Ionic
React
Other
Select a framework
Email address

Customize & try this demo locally
Sign in or start your free trial

We have to set you up with a trial for this to run 👍

Email address

Customize & try demos locally
You can download and use Mobiscroll for Free

What framework are you using?

Javascript
jQuery
AngularJS
Angular
Ionic
React
Other
Select a framework
Install demo in your app
Follow this quick, two minute install guide
Close window

Step 1.Install the Mobiscroll CLI from npm

Copy command
$ npm install -g @mobiscroll/cli

The CLI makes configuring your apps super simple 👍

Step 2.Run the following command in the root folder of your Ionic project

Copy command
$ mobiscroll config ionic
$ mobiscroll config ionic --lite

You will be prompted to log in with your mobiscroll account. Set your password here

Create an Ionic 3 & Mobiscroll starter with the CLI:

$ mobiscroll start ionic myStarter

Run this command for Ionic 4 & Mobiscroll starter:

$ mobiscroll start ionic-angular myStarter

Step 3.Copy the code into your app. HTML goes into the markup, TS into Typescript.

Copy TS
Copy HTML
Copy CSS

Run ionic serve in the root folder of your app 🎉

Copy command
$ ionic serve
Thanks for downloading
Try and customize the app locally

Extract the zip file and run the project like any Ionic app. Make sure to have Ionic CLI installed and open the terminal in the app root folder.

Step 1. Run in root folder
$ npm install
Step 2. Start the app
$ ionic serve

Let us know if we can help and enjoy!

Change your password
Need to update your password? Enter and hit the button below

You are setting a password for the account

New Password Required Enter at least 6 characters
Change your password
Need to update your password? Enter and hit the button below

Your password has been changed!

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

Extract the zip file and open the demo in your favorite browser. To install Mobiscroll in your project follow instructions from this page.


Let us know if we can help and enjoy! 👍

Thanks for downloading
Customize demos locally

The demo is using an in-browser TypeScript transpiler app as its base. Extract the zip file and open the index.html on your local dev server.

You can also use live-server. For installation and usage, open a terminal window and follow these steps.

Step 1. Install live-server
$ npm install -g live-server
Step 2. Start server & run app
$ live-server

Let us know if we can help and enjoy! 👍

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

The easiest way to get started is to follow the installation steps and by grabbing the code directly from the demo page. Let us know if we can help and enjoy!

You'll find a fully functional Kitchen-sink Ionic app in the zip file.

Thanks for downloading
Customize demos locally

Everything is set up so that you can dig in right away and start exploring.

We have set up a trial so that you can try the demos locally.

The demos are using Babel's in-browser ES6 and JSX transformer. Extract the zip file and open the demo in your browser. To install Mobiscroll in your project follow instructions from this page.


Let us know if we can help and enjoy! 👍

Demos
Alerts & notifications
Alert Notifications
Inputs & fields
Text Fields Select
Components
Alerts & notifications 2
Buttons 3
Calendar 13
Color 8
Date & Time 9
Event Calendar 3
Forms 5
Image 5
Inputs & fields 2
Listview 8
Measurement 9
Menustrip 10
Number 6
Numpad 12
Popup 2
Range 10
Rating 11
Scroller 5
Select 10
Slider & progress 3
Styling 3
Timer 4
Timespan 5
Toggle & Radio 4
Treelist 5
Theme Select
Mobiscroll
Mobiscroll Dark
Material
Material Dark
iOS
iOS Dark
Android Holo
Android Holo Light
jQuery Mobile
Bootstrap
Windows Phone
Windows Phone Light
Display Mode
Language Locale
See other demos and change options
Theme
Display
Locale
See other demos