JQGrid列包含在行内编辑模式下使用的jQueryUI日期选择器。如果DataPicker输入元素获得焦点并按下Ctrl+S或其他键,则不会执行body_onkeydown:IE9会调用ctrl+s默认行为(保存对话框)。在FireFox中,body_onkeydown也不会执行。
如何修复此代码,以便在DatePicker具有焦点时可以捕获按键?
DatePicker的定义如下:
$(elem).datepicker({
dateFormat: 'dd.mm.yy',
autoSize: true,
showOn: 'button',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
showWeek: true
});
用于捕获ctrl+s按键的代码如下:
$(function () {
$("html").keydown(body_onkeydown);
});
function body_onkeydown(evt) {
// Why this function is not executed if datepicker has focus?
if (evt.ctrlKey) {
switch (evt.keyCode) {
case 83: $("#grid_savebutton").click(); break;
}
cancel(evt);
return false;
}
function cancel(evt) {
evt.returnValue = false;
evt.keyCode = 0;
evt.cancelBubble = true;
evt.preventDefault();
evt.stopPropagation();
}
if (e.keyCode === 27) { $($t).jqGrid("restoreRow", rowid, afterrestorefunc); e.stopPropagation(); }
中会更好,以阻止 esc 键的传播。顺便问一下,你有没有看过 http://stackoverflow.com/questions/7558869/how-to-show-autocomplete-field-value-in-form-editing 中描述的问题? - Andrus