Подтвердить что ты не робот

Как я могу вызвать ng-change при вводе пробела?

У меня есть функция, вызываемая при изменении значения textarea. Он отлично работает, если не нажать клавишу пробела, то ничего не вызывается. Есть ли способ активировать это? Технически содержимое меняется, и я хотел бы, чтобы функция вызывалась независимо.

Я прикрепляю скрипку с кодом. Вы можете видеть, что массив $scope.log не нажимает новый элемент при нажатии пробела (также введите ключ), но он делает с любым другим ключом, который не является белым.

Пример скрипта: http://jsfiddle.net/UJWLN/4/

4b9b3361

Ответ 1

Вы можете использовать директиву 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(); 
            });
        }
    };
});

Ответ 2

Чтобы запустить событие ng-change на пробельной панели, я использовал ng-trim. И он работает нормально.

<textarea ng-model="myCtrl.content" name="content" ng-trim="false" rows="5" cols="15" maxlength="250"></textarea>

Ответ 3

Лучше попробуйте с этим 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);
        });
    };
})

Ответ 4

Для меня работал следующий код:

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 key

Код события 17: относится к коду события ключа управления
Код события 18: относится к коду события ключа Alt

Просто отправьте документацию ng-key, вы проверите значения keyCode там (в примере в документе angular).

Ответ 5

Если кто-то когда-нибудь вернется к этому.

Я просто прочитал это в документации: https://docs.angularjs.org/api/ng/input/input%5Btext%5D ngTrim (Необязательно)

boolean

Если установлено значение false Angular, он не будет автоматически обрезать вход. Этот параметр игнорируется для элементов ввода [type = password], которые никогда не будут обрезать вход.