2017-12-15 5 views
0

を発射ないjQueryを使って混合は、ここに私のhtmlです::NG-変更秒変化に

<input type="text" ng-trim="false" ng-change="onPOChange()" 
     ng-model="PONumber" name="PONumber" id="PONumber"/> 

は、ここに私のコールバック関数です:

$scope.purgeFilter = function (input) { 
     var output = input.replace(/[^\w]/gi, ""); 
     console.log(input + ' --> ' + output); 
     return output; 
    } 
    $scope.onPOChange = function() { 
     $('#PONumber').val($scope.purgeFilter($('#PONumber').val())); 
    }; 

私の目標は、すべての非英数字キーをフィルタリングすることです入力ボックスから入力します。

ユーザーが「!!」と入力すると、最初の「!」だけが問題になります。フィルタリング機能を起動し、2番目の "!"変更を引き起こさない。

私はそれは、最初のイベントは入力への変更であり、コールバックによって修正されたが、2番目の "!"実際の変更とは解釈されません。

"1234"、 "!"と入力すると、 "1234!"フィルタリングされて "1234"になります。次に、「!」と入力すると再び、それは変化とはみなされません。なぜなら、 "1234!"最後に入力された入力です。

私は初心者ですが、角度はまだコピーアンドペーストレベルです。

+0

する代わりに、 'NG-keyup'をお試しください:https://docs.angularjs.org/api/ng/directive/ngKeyup –

+1

あなたがドン」 jQueryやDOM選択を使用して入力を選択する必要があります。 '$ scope.PONumber = $ scope.purgeFilter($ scope.PONumber)'を使用してください –

+1

''要素の 'val'をjQueryで設定すると、コードは[ngModelController](https://docs.angularjs .org/api/ng/type/ngModel.NgModelController)。このようにAngularJSとjQueryを混在させることは問題を求めています。 – georgeawg

答えて

2

ng-change自体で以下のコードのように試してみてください。また、plunkerのご使用の例をご確認ください。

テンプレート:

<input type="text" ng-trim="false" ng-change="onPOChange(PONumber)" ng-model="PONumber" name="PONumber" id="PONumber"/> 

コントローラー:

$scope.onPOChange = function (PONumber) { 
    $scope.PONumber = $scope.purgeFilter(PONumber); 
}; 
+0

この時点で、私の理論が正しいかどうか、なぜ2番目のイベントが発砲していなかったのかはわかりませんが、JQueryを避けながら小さな変化が私の理論を欺くものでした。私のコードは今あなたの助けを借りて動作します。 Dhanyawad! – Joe