27

textareaの値が変更されたときに呼び出される関数があります。スペースバーが押されたときを除いて、それはうまく機能し、それから何も呼び出されません。これをアクティブにする方法はありますか?技術的には内容が変わってきているので、関係なく関数を呼び出してほしいです。

コードにフィドルを付けています。$scope.logスペースバーが押されたときに配列が新しい要素をプッシュしないことがわかります(Enterキーも同様)が、空白以外の他のキーではプッシュします。

サンプルフィドル: http: //jsfiddle.net/UJWLN/4/

4

5 に答える 5

45

次のように、入力でディレクティブng-trimを使用して、falseに設定できます。

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

しかし、これはすべての場合に機能するとは限りません。キーストロークごとに何かを実行したい場合は、カスタムディレクティブを試してください。私はあなたのために1つ書いた:

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(); 
            });
        }
    };
});
于 2013-03-08T00:09:45.547 に答える
8

ng-changeスペースバーでもイベントをトリガーするために、を使用しng-trimました。そして、それはうまく機能しています。

<textarea ng-model="myCtrl.content" name="content" ng-trim="false" rows="5" cols="15" maxlength="250"></textarea>
于 2015-09-10T08:16:51.607 に答える
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);
        });
    };
})
于 2013-03-08T02:10:20.687 に答える
2

誰かがこれに戻ってきたら。

ドキュメントでこれを読んだだけです: https : //docs.angularjs.org/api/ng/input/input%5Btext%5D ngTrim(オプション)

ブール値

falseに設定すると、Angularは入力を自動的にトリミングしません。このパラメーターは、入力をトリミングしないinput [type=password]コントロールでは無視されます。

于 2016-09-08T18:57:26.233 に答える
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:Enterキーイベントコードを参照します
。イベントコード16:シフトキーイベントコードを参照します
。イベントコード17:コントロールキーイベントコードを参照します
。イベントコード18: Altキーイベントコードを参照します

ng-keyのドキュメントを参照して、そこでkeyCode値を試してください(Angularドキュメントの例の下にあります)。

于 2016-01-04T08:19:46.383 に答える