我有一个在textarea值改变时调用的函数。它工作得很好,除非按下空格键,然后没有任何东西被调用。有没有办法激活这个?从技术上讲,内容正在发生变化,我希望无论如何都要调用该函数。
我附上了代码的小提琴。您可以看到$scope.log
数组在按下空格键时不会按下新元素(也可以输入键),但它可以与任何其他不是空格的键一起使用。
答案 0 :(得分:39)
您可以在输入中使用指令ng-trim并将其设置为false,如下所示:
<textarea ng-change="changeFunction()" ng-model="myModel" ng-trim="false"></textarea>
但这不适用于所有情况。如果您希望在每次击键时执行某些操作,请尝试使用自定义指令。我为你写了一个:
myApp.directive('ngKeystroke', function(){
return {
restrict: 'A',
link: function(scope, elem, attrs){
elem.bind("keyup", function(){
scope.log.push('called');
scope.$digest();
});
}
};
});
答案 1 :(得分:2)
最好尝试使用此jsfiddle
html
<div ng-controller="MyCtrl">
<textarea key-listener="changeFunction()" ng-model="myModel"></textarea>
<div>{{log}}</div>
</div>
javascript
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.log=[];
$scope.changeFunction=function(){
$scope.log.push('Called');
}
}
myApp.directive('keyListener', function() {
return function(scope, elm, attrs) {
elm.bind("keyup", function(event) {
scope.$apply(attrs.keyListener);
});
};
})
答案 2 :(得分:0)
对我来说,以下代码有效:
<强> HTML:强>
<input type="text" ng-model="typedEmail" ng-keyup="($event.keyCode == 32) ? validateEmail(typedEmail) : ''">
<强>控制器:强>
$scope.validateEmail = function(emailId){
//Your Code goes here
};
事件代码32:指空格键键事件代码
的类似地下,
事件代码13:指输入键事件代码
事件代码16:指Shift键事件代码
事件代码17:指控制键事件代码
事件代码18:引用Alt键事件代码
只需参考ng-key文档,您可以在那里尝试keyCode值(在角度文档的示例中向下)。
答案 3 :(得分:0)
如果有人回到此处。
我刚才在文档中看到了这个: https://docs.angularjs.org/api/ng/input/input%5Btext%5D ngTrim (可选)
布尔
如果设置为false,Angular将不会自动修剪输入。 输入[type = password]控件将忽略此参数,该控件永远不会修剪输入。