Jquery ui 在';今天';jquery ui数据采集器中的按钮

Jquery ui 在';今天';jquery ui数据采集器中的按钮,jquery-ui,jquery-ui-datepicker,Jquery Ui,Jquery Ui Datepicker,我使用的是日期选择器表单jQuery-ui-1.8.16 我有以下代码: Site.Calendar = function() { // Set default setting for all calendars jQuery.datepicker.setDefaults({ showOn : 'both', buttonImageOnly : true, buttonText: '', changeMonth :

我使用的是日期选择器表单jQuery-ui-1.8.16

我有以下代码:

Site.Calendar = function() {

    // Set default setting for all calendars
    jQuery.datepicker.setDefaults({
        showOn : 'both',
        buttonImageOnly : true,
        buttonText: '',
        changeMonth : true,
        changeYear : true,
        showOtherMonths : true,
        selectOtherMonths : true,
        showButtonPanel : true,
        dateFormat : "D, d M, yy",
        showAnim : "slideDown",
        onSelect: Site.Calendar.customiseTodayButton
    });
};

Site.Calendar.customiseTodayButton = function(dateText, inst) {
    console.log("hello");
};
我的customiseTodayButton函数仅在我选择实际日期时触发,而不是在“今天”按钮上触发

有没有办法覆盖jQuery日期选择器中的“今天”按钮的工作方式


谢谢

单击“今日”按钮时没有标准事件。但是,看看jquery.ui.datepicker.js代码,它似乎调用了
$.datepicker.\u gotoday
。我将通过
customizeTodayButton
假设您正在尝试更改它当前的行为(不是外观,外观将通过样式来完成)。要改变现有的行为,最好知道它现在做什么。请记住,这是所用函数的当前代码:

/* Action for current link. */
_gotoToday: function(id) {
    var target = $(id);
    var inst = this._getInst(target[0]);
    if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
        inst.selectedDay = inst.currentDay;
        inst.drawMonth = inst.selectedMonth = inst.currentMonth;
        inst.drawYear = inst.selectedYear = inst.currentYear;
    }
    else {
        var date = new Date();
        inst.selectedDay = date.getDate();
        inst.drawMonth = inst.selectedMonth = date.getMonth();
        inst.drawYear = inst.selectedYear = date.getFullYear();
    }
    this._notifyChange(inst);
    this._adjustDate(target);
},
要使用自己的功能覆盖此函数,您需要将代码更新为以下内容:

Site.Calendar = function() {
    //override the existing _goToToday functionality
    $.datepicker._gotoTodayOriginal = $.datepicker._gotoToday;
    $.datepicker._gotoToday = function(id) {
        // now, call the original handler
        $.datepicker._gotoTodayOriginal.apply(this, [id]);
        // invoke selectDate to select the current date and close datepicker.
        $.datepicker._selectDate.apply(this, [id]);
    };

    // Set default setting for all calendars
    jQuery.datepicker.setDefaults({
        showOn: 'both',
        buttonImageOnly: true,
        buttonText: '',
        changeMonth: true,
        changeYear: true,
        showOtherMonths: true,
        selectOtherMonths: true,
        showButtonPanel: true,
        dateFormat: "D, d M, yy",
        showAnim: "slideDown"
    });
};

此外,这里还有一份您正在寻找的作品。

我在这里找到了以下内容:

它只需重写GoToDay方法并添加两行新行:

this._setDateDatepicker(target, date);
this._selectDate(id, this._getDateDatepicker(target));

也许有一种更干净的方法可以用你原来的答案来解决这个问题?

我用这种方法实现了今天按钮的覆盖:

jQuery.datepicker._gotoToday = function(id) {
    var today = new Date();
    var dateRef = jQuery("<td><a>" + today.getDate() + "</a></td>");
    this._selectDay(id, today.getMonth(), today.getFullYear(), dateRef);
};
jQuery.datepicker.\u gotoday=function(id){
var today=新日期();
var dateRef=jQuery(“+today.getDate()+”);
这。\您选择Day(id,today.getMonth(),today.getFullYear(),dateRef);
};

这非常简单,并且实现了我想要的“选择日期并关闭日期选择器”功能。

谢谢Mark。我想使“今天”按钮的行为类似于“日期”按钮,即选择“今天”按钮会将输入字段更新为“今天日期”,并关闭日历。我应该能够根据您的回答来找出答案:)所以这段代码无法正常工作,我忘记了datepicker实际上并不像其他ui组件那样使用ui小部件类。现在更新答案,并添加您想要的内容。嗨,马克。不幸的是,它在IE中不起作用:(当选择“今天”按钮时,日历似乎很快关闭和重新打开。有什么想法吗?我找到了一个可以跨所有主要浏览器(IE、Chrome、Firefox)工作的解决方案)…请看我在这条线索中的新帖子我想你想说的是“今天”。getDay()在td中
jQuery.datepicker._gotoToday = function(id) {
    var today = new Date();
    var dateRef = jQuery("<td><a>" + today.getDate() + "</a></td>");
    this._selectDay(id, today.getMonth(), today.getFullYear(), dateRef);
};