Angular:与jQuery混合的ng-change在第二次更改时没有触发

时间:2017-12-15 15:58:16

标签: javascript jquery angularjs regex

这是我的html:

<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()));
    };

我的目标是在用户输入时从输入框中过滤掉所有非字母数字键。

问题是,如果用户键入“!!”,则只有第一个“!”触发过滤功能,第二个“!”不会触发ng-change。

我认为这是因为,第一个事件是对输入的更改,然后由回调更正,但第二个“!”不被解释为实际的变化。

如果我输入“1234”然后“!”,则输入“1234!”被过滤为“1234”。然后当我输入“!”再次,它不被认为是一个变化,因为“1234!”是输入的最后一个输入。

我是Angular的初学者,仍处于复制粘贴级别。

1 个答案:

答案 0 :(得分: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);
};