在浏览器中运行 Flex 应用程序或作为 AIR 应用程序时,似乎无法捕获通常用于复制的键盘事件,可能是因为浏览器或操作系统首先拦截了它。
有没有办法告诉浏览器或操作系统让事件通过?
例如,在 AdvancedDataGrid 上,我将 keyUp 事件设置为 handleCaseListKeyUp(event),它调用以下函数:
private function handleCaseListKeyUp(event:KeyboardEvent):void
{
var char:String = String.fromCharCode(event.charCode).toUpperCase();
if (event.ctrlKey && char == "C")
{
trace("Ctrl-C");
copyCasesToClipboard();
return;
}
if (!event.ctrlKey && char == "C")
{
trace("C");
copyCasesToClipboard();
return;
}
// Didn't match event to capture, just drop out.
trace("charCode: " + event.charCode);
trace("char: " + char);
trace("keyCode: " + event.keyCode);
trace("ctrlKey: " + event.ctrlKey);
trace("altKey: " + event.altKey);
trace("shiftKey: " + event.shiftKey);
}
运行时,我永远无法在按下命令键(显示为 KeyboardEvent.ctrlKey)的同时释放“C”键。我得到以下跟踪结果:
charCode: 0
char:
keyCode: 17
ctrlKey: false
altKey: false
shiftKey: false
如您所见,我可以捕获的唯一事件是释放命令键,甚至没有发送在按住命令键时释放“C”键。
有没有人成功实施标准的复制和粘贴键盘处理?
我注定要单独使用“C”键(如代码示例所示)还是提供一个复制按钮?
或者我是否需要在更高级别手动创建侦听器并将事件传递到我的模块化应用程序的内部?