我的按鍵事件處理程序始終是一個按鍵,並以某種方式$timeout
修復此問題。
<body ng-controller="myController">
<form>
<input ng-keypress="handleKeypress($event)" />
</form>
</body>
控制器:
myapp.controller('myController', function($scope, $timeout){
$scope.handleKeypress = function(ev){
console.log(ev.target.value); //always one keystroke behind
//$timeout(function(){console.log(ev.target.value);}); //works!
};
});
爲什麼$timeout
必要的和爲什麼/它是如何工作的?
據我所知,使用keypress
事件這個字符還沒有被插入到DOM中,但我很困惑,因爲angularjs.org上的Hello World示例在釋放一個密鑰之前做出響應。
(他們的榜樣不使用自定義事件處理程序,但顯然角被更新keyup
事件之前的模型,所以我想了解更多關於自定義事件處理程序做這個。)
event.which
可以在keypress
和上找到,我想也許Angular可能會使用String.fromCharCode()
,但是我沒有看到Angular的源代碼中有這個效果。
$ timeout強制摘要發生。雖然ng-keypress也應該觸發一個摘要,所以我不確定爲什麼它落後一步。有沒有更多的代碼你沒有發佈? –
我認爲這是onkeypress事件的問題,請檢查以下內容:http://stackoverflow.com/questions/9349587/javascript-onkeypress-event-fires-but-input-text-value-is-incorrect,http:// stackoverflow .com/questions/5340751/javascript-last-character-missing-on-onkeypress-event –