javascript – Angular.js – 从输入中过滤无效字符的控制器函数在输入有效字符之前不会删除字符

我已经创建了一个JSfiddle我遇到的问题: http://jsfiddle.net/9qxFK/4/

我有一个输入字段,我只想允许小写字母,数字和连字符(此字段将用于URL).

我有以下angular.js控制器方法,以便执行此操作:

$scope.auto_slug = function() {
    $scope.slug = $scope.slug.toLowerCase().replace(/[^a-z0-9\-\s]/g,'').replace(/\s+/g,'-');
};

只有在无效字符后键入有效字符时才会删除无效字符.

任何人都可以告诉我为什么这不起作用?

谢谢,斯科特

解决方法

而不是在控制器上执行此操作,您应该使用这样的指令:
app.directive('restrict',function($parse) {
    return {
        restrict: 'A',require: 'ngModel',link: function(scope,iElement,iAttrs,controller) {
            scope.$watch(iAttrs.ngModel,function(value) {
                if (!value) {
                    return;
                }
                $parse(iAttrs.ngModel).assign(scope,value.toLowerCase().replace(new RegExp(iAttrs.restrict,'g'),'-'));
            });
        }
    }
});​

然后在你的输入上使用它,如下所示:

<input restrict="[^a-z0-9\-\s]" data-ng-model="slug" ...>

jsfiddlehttp://jsfiddle.net/9qxFK/5/

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...