2017-11-18 131 views
0

我试着触发“`”keyCode = 192当我按“输入”keyCode = 13。我想下面的代码,但它不工作在contenteditable div。任何想法? 以及如何$应用此?触发其他键而不是原始键使用angularjs

$scope.pressKey = function(event){ 
if(event.keyCode == 13){ 

    event.preventDefault(); 
    var e=angular.element.Event('keydown'); 
    console.log(e); 
    e.which=192; 
    $('#regularDot').trigger(e); 


    } 

<div id="regularDot" ng-keypress="pressKey($event)" class="wf-loading" 
ng-model="regularDot" contenteditable="true" n></div> 
+0

[如何捕获event.keyCode并将其更改为另一个keyCode?](https://stackoverflow.com/questions/8776543/how-to-catch-event-keycode-and-change-it-到另一个-键码) –

回答

0

不要使用纯JS方法,如KeyboardEvent()它具有跨浏览器支持问题,使用jQuery来代替。

现在angular.element有jquery的基本支持,但它不支持你使用的Event()方法。所以最好的方法是在您的代码库中使用jquery库(在index.html中的angularjs之前,其脚本标签已附加)。然后更改您的代码如下:

$scope.pressKey = function(event) { 
    if (event.keyCode == 13) { 

     event.preventDefault(); 
     var e = jQuery.Event('keypress'); 
     console.log(e); 
     e.which = 192; 
     e.keyCode = 192; 
     $timeout(function() { 
      $('#regularDot').trigger(e); 
     }); 
    } else if(event.keyCode == 192){ 
     console.log("Newly triggered event catched with keyCode " + event.keyCode); 
    } 
} 

在这里,我做了,如添加内部$timeout因此触发方式,它会等待一小段时间设置之前完成之前触发事件的preventDefault只是一些变化(触发)新事件,并做$apply也。我已将新触发的事件类型更改为keypress而不是​​,以便在触发事件后,您将能够使用该元素上的ng-keypress(id为regularDot)处理它。

类似plunker example来引用。