jqgrid列包含在内联编辑模式下使用的
jqueryUI DataPicker.
如果DataPicker输入元素具有焦点并且按下了Ctrl S或其他某个键,则不执行body_onkeydown:IE9调用ctrl的默认行为(保存对话框).在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();
}
最佳答案 这是一个很好的问题!在jqGrid的代码中你可以在某些时候返回false或
stopPropagation内部的事件句柄,我个人觉得不需要.在你的情况下,问题是jquery.jqGrid.src.js的行8237(在版本4.1.2中)或grid.inlinedit.js的行87(见
here):
e.stopPropagation();
如果您发表评论,内联编辑将不再停止传播keydown事件以及您在the demo上可以看到的内容,您将能够在内联编辑期间捕获Ctrl S.