在 AngularJS 的 ng-grid 单元格中检测 Ctrl+Alt+O 按键
Detect Ctrl+Alt+O key press in a ng-grid cell of AngularJS
我可以检测到单键按下,但是当我一次按下 3 个键时,它不会触发事件。下面是我的代码。当我按下 delete 按钮时,它检测到但是当我按下 Ctrl + Alt + O,不触发事件
我正在尝试修改 ng-grid
单元格值,修改后我想在按下这三个键时恢复之前的值。
$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){}
};
我怎样才能做到这一点?
有一个类似的问题,表示使用 keydown 而不是 pressedKey。 @Martijn Welker 的回答似乎回答了另一个问题。
我绝对不知道angular,就不说了,但是
if (keyObj.key.toLowerCase() == "control" &&
keyObj.key.toLowerCase() == "alt" &&
keyObj.key.toLowerCase() == "o")
{
console.log("Ctrl Alt O key press Detected");
}
是一条死胡同。
如果keyObj.key
是String,那么它的toLowerCase()
返回值不能同时为"control"
和"alt"
和"o"
。
现在,假设 keyObj
是一个 KeyboardEvent,那么您应该将 .altKey
and .ctrlKey
属性附加到它。
所以检测ctrl + alt + o,
if (keyObj.key.toLowerCase() == "o" &&
keyObj.altKey &&
keyObj.ctrlKey)
{
console.log("Ctrl Alt O key press Detected");
}
有3点:
- 您应该使用 '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', function(event) {
if (event.ctrlKey && event.altKey && !event.shiftKey && event.keyCode === 79) {
console.log('CTRL + ALT + O was pressed');
}
})
Focus on this snippet and then try to press "CTRL + ALT + O" and any other combinations
我可以检测到单键按下,但是当我一次按下 3 个键时,它不会触发事件。下面是我的代码。当我按下 delete 按钮时,它检测到但是当我按下 Ctrl + Alt + O,不触发事件
我正在尝试修改 ng-grid
单元格值,修改后我想在按下这三个键时恢复之前的值。
$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){}
};
我怎样才能做到这一点?
我绝对不知道angular,就不说了,但是
if (keyObj.key.toLowerCase() == "control" &&
keyObj.key.toLowerCase() == "alt" &&
keyObj.key.toLowerCase() == "o")
{
console.log("Ctrl Alt O key press Detected");
}
是一条死胡同。
如果keyObj.key
是String,那么它的toLowerCase()
返回值不能同时为"control"
和"alt"
和"o"
。
现在,假设 keyObj
是一个 KeyboardEvent,那么您应该将 .altKey
and .ctrlKey
属性附加到它。
所以检测ctrl + alt + o,
if (keyObj.key.toLowerCase() == "o" &&
keyObj.altKey &&
keyObj.ctrlKey)
{
console.log("Ctrl Alt O key press Detected");
}
有3点:
- 您应该使用 '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', function(event) {
if (event.ctrlKey && event.altKey && !event.shiftKey && event.keyCode === 79) {
console.log('CTRL + ALT + O was pressed');
}
})
Focus on this snippet and then try to press "CTRL + ALT + O" and any other combinations