jQuery Datepicker onSelect事件获取类

时间:2015-03-05 23:28:29

标签: javascript jquery jquery-ui jquery-ui-datepicker

当用户点击日期时,我正试图在jQuery日期选择器的beforeShowDay函数中设置类。像这样:

$("#calendar").datepicker({
    minDate: today,
    dateFormat: dateformat,
    beforeShowDay: function(date) {         
        // set all the dates to have reserved class for now 
        return [true, 'reserved', 'this date reserved'];
    },
    onSelect: function(date, el){
        if ($(el).hasClass('reserved')){
            // on click, check if reserved class exists. 
            console.log('it is reserved!');
        } else {
            console.log('it is not reserved');
        }
    }
});

每次点击都会返回“未保留”。如何查看所单击元素的类?

http://jsfiddle.net/sf90zw72/

2 个答案:

答案 0 :(得分:13)

不幸的是,它比这更难,你得到的el参数是一个包含datePicker实例的对象,而不是文档中点击的元素

  

...将所选日期作为文本,将datepicker实例作为   参数。

只有所选日期和父Datepicker元素包含在该对象中,因此您必须使用这些属性来选择元素并检查该类。

请注意,在您的示例中,所有日期都将包含reserved类,因为没有条件,但我假设实际代码中有不同

(function ($) {
    $(document).ready(function () {
        $("#calendar").datepicker({
            dateFormat: 'yyyy-mm-dd',
            beforeShowDay: function (date) {
                return [true, 'reserved', 'this date reserved'];
            },
            onSelect: function (date, el) {
                var day  = el.selectedDay,
                    mon  = el.selectedMonth,
                    year = el.selectedYear;

                var el = $(el.dpDiv).find('[data-year="'+year+'"][data-month="'+mon+'"]').filter(function() {
                    return $(this).find('a').text().trim() == day;
                });

                if ( el.hasClass('reserved')){
                    console.log('it is reserved!');
                } else {
                    console.log('it is not reserved');
                }
            }
        });
    });
})(jQuery);

FIDDLE

答案 1 :(得分:0)

我认为它可以这么简单:

    $jx('.date-picker').datepicker({
        onSelect: function(dateText, $el) {
            if ($jx(this).hasClass('start-date')) {
                console.log('...');
            }
        }           
    });