Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test if element already has jQuery datepicker

I have a form with many input elements. Some are date fields with a jQuery UI datepicker alraedy attached:

$("#someElement").mask("9?9/99/9999").datepicker({showOn: 'button', buttonText:'Click here to show calendar', duration: 'fast', buttonImageOnly: true, buttonImage: /images/calicon.gif' });

Then I have a key command bound to this function:

function openCalendar() {
    var selection = document.activeElement;

    // { Need to test here if datepicker has already been initialized 
        $(selection).datepicker("show");
    // }
}

This works great for elements which already have the datepicker on them. However any other fields will throw a javascript error. I'm wondering the best way to test to see if datepicker has already been initialized on that field.

like image 912
macca1 Avatar asked Apr 05 '10 16:04

macca1


2 Answers

Wow can't believe I missed this one. Line 108 of ui.datepicker.js:

/* Class name added to elements to indicate already configured with a date picker. */
markerClassName: 'hasDatepicker',

So I just need to test for hasClass('hasDatepicker'). This seems like the most straightforward way. Furthermore, this statement checks whether the datepicker is currently opened (for anyone who is interested):

if ($("#ui-datepicker-div").is(":visible") && $("#ui-datepicker-div").html() != "") {
    // datepicker is open. you need the second condition because it starts off as visible but empty
}
like image 178
macca1 Avatar answered Nov 04 '22 21:11

macca1


1) If the code throws an error when trying to open the datepicker, you can put the code into try..catch

2) You can set some data to the input field when initializing the datepicker

$("#someElement").data("datepicker-initialized", true);

3) You can use the data stored by datepicker plugin

if($("#someElement").data("datepicker") != null){
   // datepicker initialized
}

or

if($.data($('#someElement').get(0), 'datepicker')){
   // datepicker initialized
}

4) datepicker internally uses a function _getInst

if($.datepicker._getInst($('#someElement')[0]) != null){}

the method does almost the same as example 3.

Couldn't find any better solution.

like image 14
Rafael Avatar answered Nov 04 '22 22:11

Rafael