如何在输入空格时触发ng-change?

时间:2013-03-07 22:22:51

标签: javascript angularjs

我有一个在textarea值改变时调用的函数。它工作得很好,除非按下空格键,然后没有任何东西被调用。有没有办法激活这个?从技术上讲,内容正在发生变化,我希望无论如何都要调用该函数。

我附上了代码的小提琴。您可以看到$scope.log数组在按下空格键时不会按下新元素(也可以输入键),但它可以与任何其他不是空格的键一起使用。

示例小提琴:http://jsfiddle.net/UJWLN/4/

4 个答案:

答案 0 :(得分:39)

您可以在输入中使用指令ng-trim并将其设置为false,如下所示:

<textarea ng-change="changeFunction()" ng-model="myModel" ng-trim="false"></textarea>

但这不适用于所有情况。如果您希望在每次击键时执行某些操作,请尝试使用自定义指令。我为你写了一个:

http://jsfiddle.net/UJWLN/6/

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]控件将忽略此参数,该控件永远不会修剪输入。