你可以重写_doKeyDown
函数,并使用自己的定义更改其行为。
如果您想通过跳过CTRL测试以不同方式处理键代码37、38、39、40,则可以从jQuery UI日期选择器中复制默认的_doKeyDown
并根据需要更改该函数。
我已经从请求的键代码中删除了起始if语句:
if (event.ctrlKey || event.metaKey) {
所以代码直接是动作,无需按下Ctrl键。
代码:
$.extend($.datepicker, {
_doKeyDown: function(event) {
var onSelect, dateStr, sel,
inst = $.datepicker._getInst(event.target),
handled = true,
isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
inst._keyEvent = true;
if ($.datepicker._datepickerShowing) {
switch (event.keyCode) {
case 9: $.datepicker._hideDatepicker();
handled = false;
break;
case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
$.datepicker._currentClass + ")", inst.dpDiv);
if (sel[0]) {
$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
}
onSelect = $.datepicker._get(inst, "onSelect");
if (onSelect) {
dateStr = $.datepicker._formatDate(inst);
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
} else {
$.datepicker._hideDatepicker();
}
return false;
case 27: $.datepicker._hideDatepicker();
break;
case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, "stepBigMonths") :
-$.datepicker._get(inst, "stepMonths")), "M");
break;
case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, "stepBigMonths") :
+$.datepicker._get(inst, "stepMonths")), "M");
break;
case 35: if (event.ctrlKey || event.metaKey) {
$.datepicker._clearDate(event.target);
}
handled = event.ctrlKey || event.metaKey;
break;
case 36: if (event.ctrlKey || event.metaKey) {
$.datepicker._gotoToday(event.target);
}
handled = event.ctrlKey || event.metaKey;
break;
case 37: $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
handled = event.ctrlKey || event.metaKey;
if (event.originalEvent.altKey) {
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, "stepBigMonths") :
-$.datepicker._get(inst, "stepMonths")), "M");
}
break;
case 38: $.datepicker._adjustDate(event.target, -7, "D");
handled = event.ctrlKey || event.metaKey;
break;
case 39: $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
handled = event.ctrlKey || event.metaKey;
if (event.originalEvent.altKey) {
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, "stepBigMonths") :
+$.datepicker._get(inst, "stepMonths")), "M");
}
break;
case 40: $.datepicker._adjustDate(event.target, +7, "D");
handled = event.ctrlKey || event.metaKey;
break;
default: handled = false;
}
} else if (event.keyCode === 36 && event.ctrlKey) {
$.datepicker._showDatepicker(this);
} else {
handled = false;
}
if (handled) {
event.preventDefault();
event.stopPropagation();
}
}
});
原始的jQuery UI日期选择器代码:https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js#L568
演示:http://jsfiddle.net/IrvinDominin/7ck7D/