Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测Ctrl+;Alt+;O在AngularJS的ng网格单元中按键_Javascript_Angularjs_Keyboard Shortcuts_Ng Grid - Fatal编程技术网

Javascript 检测Ctrl+;Alt+;O在AngularJS的ng网格单元中按键

Javascript 检测Ctrl+;Alt+;O在AngularJS的ng网格单元中按键,javascript,angularjs,keyboard-shortcuts,ng-grid,Javascript,Angularjs,Keyboard Shortcuts,Ng Grid,我能够检测到单次按键,但当我一次按3个键时,它不会触发事件。下面是我的代码。当我按delete按钮时,它会检测到,但当我按Ctrl+Alt+O时,它不会触发事件 我正在尝试修改ng网格单元格值,一旦修改后,我想在按下这三个键时恢复以前的值 $scope.pressedKey = function (keyObj) { if (keyObj.key.toLowerCase() == "delete") { console.log("Delete key press Det

我能够检测到单次按键,但当我一次按3个键时,它不会触发事件。下面是我的代码。当我按delete按钮时,它会检测到,但当我按Ctrl+Alt+O时,它不会触发事件

我正在尝试修改
ng网格
单元格值,一旦修改后,我想在按下这三个键时恢复以前的值

$scope.pressedKey = function (keyObj) {
    if (keyObj.key.toLowerCase() == "delete") {
        console.log("Delete key press  Detected");
    }
    if (keyObj.key.toLowerCase() == "control" && keyObj.key.toLowerCase() == "alt" && keyObj.key.toLowerCase() == "o")
    {
        console.log("Ctrl Alt O key press Detected");
    }
};

$scope.ng_grid_column_defs =
[
    {
        field: "A",
        displayName: "A",
        width: "**"
    },
    {
        field: "B",
        displayName: "B",
        width: "*"
    },
    {
        field: "C",
        displayName: "C",
        width: "***"
    }
];

$scope.my_ng_grid = {
    data: "$scope.data",//this data comes from service
    columnDefs: context.ng_grid_column_defs,
    enableColumnResize: true,
    enableCellEdit: true,
    enableCellEditOnFocus: true,
    enableCellSelection: false,
    enableRowSelection: true,
    rowHeight: 20,
    rowTemplate: '<div ng-keydown="pressedKey($event)" tabindex="1" style="height: 100%; width: 100%">' +
                '<div ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell ">' +
                  '<div ng-cell></div>' +
                '</div>' +
             '</div>',
    beforeSelectionChange: function(rowItem, event){},
    afterSelectionChange: function (rowItem, event){}

};
$scope.pressedKey=功能(keyObj){
if(keyObj.key.toLowerCase()=“删除”){
console.log(“检测到删除按键”);
}
if(keyObj.key.toLowerCase()=“control”&&keyObj.key.toLowerCase()=“alt”&&keyObj.key.toLowerCase()=“o”)
{
日志(“检测到Ctrl-Alt O键按下”);
}
};
$scope.ng\u网格\u柱\u定义=
[
{
字段:“A”,
显示名称:“A”,
宽度:“**”
},
{
字段:“B”,
显示名称:“B”,
宽度:“*”
},
{
字段:“C”,
显示名称:“C”,
宽度:“***”
}
];
$scope.my_ng_grid={
数据:“$scope.data”,//此数据来自服务
columnDefs:context.ng\u grid\u column\u defs,
enableColumnResize:true,
enableCellEdit:true,
enableCellEditOnFocus:true,
enableCellSelection:false,
enableRowSelection:true,
行高:20,
行模板:“”+
'' +
'' +
'' +
'',
beforeSelectionChange:函数(行项,事件){},
afterSelectionChange:函数(行项目,事件){}
};

我如何才能做到这一点?

有一个类似的问题,表明使用keydown而不是pressedKey。@Martijn Welker的回答似乎回答了另一个问题。

我绝对不知道,所以我不会谈论它,但是

if (keyObj.key.toLowerCase() == "control" && 
  keyObj.key.toLowerCase() == "alt" &&
  keyObj.key.toLowerCase() == "o")
{
    console.log("Ctrl Alt O key press Detected");
}
这是一条死胡同

如果
keyObj.key
是一个字符串,那么它的
toLowerCase()
返回值不能同时是
“control”
“alt”
“o”

现在,假设
keyObj
是一个KeyboardEvent,那么您应该将和属性附加到它

所以要检测ctrl+alt+o

有三点:

  • 您应该使用“keydown”或“keyup”事件
  • 您应该检查
    event.altKey===true&&event.ctrlKey===true&&event.shiftKey==false
    ,以检测是否按下了CTRL和ALT,而没有按下SHIFT
  • 您应该检查
    event.keyCode===79
    值,以检测是否按下了键“O”。这是键盘上的一个数字键,若用户切换输入语言,它不会改变。如果您只需要拉丁语变体,您仍然可以检查
    event.key===“o”
document.body.addEventListener('keyup',函数(事件){
if(event.ctrlKey&&event.altKey&&event.shiftKey&&event.keyCode==79){
log('CTRL+ALT+O被按下');
}
})

关注这段代码,然后尝试按“CTRL+ALT+O”和其他组合键
谢谢@Steven!!!我只使用了ng键控事件。它仍然不起作用。您是否尝试过在调试器中单步执行代码以查看发生了什么?你能自己检测控制键和alt键吗?是的,我的代码检测任何键,但单独检测。组合键不起作用,有一件事我很确定。我正在努力解决这个问题,只是因为ng网格。如果没有天然气网格,那么它就会正常工作。我不知道怎么做,但查看了其他响应。我所能想到的就是使用调试器,按住CTRL键查看代码的去向。然后按ALT键,查看代码是如何进入程序的,并查看CTRL键可能处于什么状态。可能钥匙的状态已经改变了?如果你想得到快速的响应,值得在Plunker/Fiddle/Codepen中用你的ui网格表、自定义cellTemplate发布演示。这将节省我们很多时间。谢谢您应该考虑编辑其他正确答案,因为您的答案基本相同。谢谢您的回复!如果你读了我的问题。在我的例子中,不需要“addEventListener”,因为在我的html代码中已经使用“ng keydown”触发了密钥事件。除此之外,信息与Kaido给出的答案有些相似。很抱歉延迟回复!!!'keyObj.key一次不能等于3个字符串。所以用这种方式检查是没有意义的。那真是条死胡同。你最后在回答中添加的内容非常有效。谢谢
if (keyObj.key.toLowerCase() == "o" &&
  keyObj.altKey &&
  keyObj.ctrlKey)
{
    console.log("Ctrl Alt O key press Detected");
}