2017-10-25 14 views
3

키를 한 번 누를 수는 있지만 한 번에 3 키를 누르면 이벤트가 트리거되지 않습니다. 아래는 제 코드입니다. 내가 삭제 버튼을 누르면, 그것은 감지하지만 내가 Ctrl 키 + Alt 키를 + O을 쳤을 때, 그것은 이벤트를 트리거하지 않습니다.AngularJS의 그리드 셀에서 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){} 

}; 

어떻게하면됩니까?

+0

당신이 당신의 UI 그리드 테이블과 Plunker/바이올린/Codepen에서 데모를 게시 할 가치가 빠른 응답을 얻고 싶은 경우에 , custom cellTemplate. 그것은 우리에게 많은 시간을 절약 할 것입니다. 감사합니다 –

답변

4

나는 절대적으로 각도 모르는, 그래서 나는 그것에 대해 얘기하지 않지만

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" 될 수 없습니다, String입니다.

이제 keyObj이 KeyboardEvent라고 가정하면 .altKey.ctrlKey 속성이 연결되어 있어야합니다.

그래서

if (keyObj.key.toLowerCase() == "o" && 
    keyObj.altKey && 
    keyObj.ctrlKey) 
{ 
    console.log("Ctrl Alt O key press Detected"); 
} 
+0

지연된 응답을 드려 죄송합니다. 'keyObj.key'는 한 번에 3 개의 문자열과 같을 수 없습니다. 그렇게 확인하는 것은 말이되지 않습니다. 그것은 정말로 막 다른 골목입니다. 마침내 답안에 추가 한 내용이 완벽하게 작동합니다. 감사! – MAC

1

detecting key presses에 대해 pressed 키 대신 keydown을 사용한다는 것을 나타내는 유사한 질문이 있습니다. @Martijn Welker의 대답은 다른 문제에 대한 대답 인 것으로 보입니다.

+0

고마워요 @ 스틴! 나는 ng-keydown 이벤트 만 사용했습니다. 여전히 작동하지 않습니다. – MAC

+0

디버거의 코드를 밟아 무슨 일이 일어나는지 보았습니까? 당신은 Control keydown, alt keydown을 스스로 발견 할 수 있습니까? –

+0

예 내 코드가 개별적으로 키를 감지합니다. 키 조합은 작동하지 않습니다. – MAC

2

3 점 있습니다 Ctrl + Alt +, O를 감지 :

  • 당신이해야 사용 '를 keyDown'또는 '의 keyup'이벤트;
  • event.altKey === true && event.ctrlKey === true && event.shiftKey === false을 확인하여 CTRL과 ALT를 누르고 SHIFT가 아닌지 확인해야합니다.
  • 키 "O"를 눌렀는지 확인하려면 event.keyCode === 79 값을 확인해야합니다. 키보드의 핵심 요소이며 사용자가 입력 언어를 전환하면 변경되지 않습니다. 당신은 라틴 변형이 필요하면 여전히 확인할 수 있습니다 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

+1

답변이 본질적으로 동일하므로 다른 정답을 편집해야합니다. – Taurus

+0

응답 해 주셔서 감사합니다! 내 질문을 읽으면. 제 경우에는 'addEventListener'가 필요하지 않습니다. 키 이벤트가 이미 html 코드에서 'ng-keydown'을 사용하여 트리거되고 있기 때문입니다. 이것 이외의 정보는 Kaiido가 제공 한 답과 다소 유사합니다. – MAC