Javascript 检测Ctrl+;Alt+;O在AngularJS的ng网格单元中按键
我能够检测到单次按键,但当我一次按3个键时,它不会触发事件。下面是我的代码。当我按delete按钮时,它会检测到,但当我按Ctrl+Alt+O时,它不会触发事件 我正在尝试修改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
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”事件李>
- 您应该检查
,以检测是否按下了CTRL和ALT,而没有按下SHIFT李>event.altKey===true&&event.ctrlKey===true&&event.shiftKey==false
- 您应该检查
值,以检测是否按下了键“O”。这是键盘上的一个数字键,若用户切换输入语言,它不会改变。如果您只需要拉丁语变体,您仍然可以检查event.keyCode===79
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");
}