【问题标题】:ng-pattern wrong or not doesn't allow tooltip to be triggeredng-pattern 错误或不允许触发工具提示
【发布时间】:2014-04-07 17:43:43
【问题描述】:

我在呈现如下的输入字段中使用此 ng-pattern="/^[0-9]{9}$/"

<input 
    type="text" 
    id="company_taxId" 
    ng-model="company.taxId" 
    required="required" 
    class="input ng-scope ng-valid-maxlength ng-valid-minlength ng-dirty ng-valid-required ng-invalid ng-invalid-pattern" 
    style="width:485px;" 
    ng-minlength="9" 
    maxlength="9" 
    ng-maxlength="9" 
    ng-pattern="/^[0-9]{9}$/" 
    placeholder="Ej: 458965879" 
    tooltip="Ej: 458965879" 
    wv-def="Ej: 458965879" 
    tooltip-trigger="focus" 
    tooltip-placement="right" 
    wv-cur="" 
    wv-err="Este valor debería ser un número válido." 
    wv-req="Este campo es requerido" 
    wv-min="Este valor debería tener exactamente 9 caracteres" 
    wv-max="Este valor debería tener exactamente 9 caracteres"
>

如果模式失败,例如,如果我写了字母而不是数字,则应该触发消息“Este valor debería ser un número válido”,但它不起作用,我找不到问题所在。图案错了吗?有什么问题?

这是处理工具提示触发器的指令:

app.directive('validated', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {

            element.keyup(function(){
                parent = $('.tooltip');
                target = parent.find('.tooltip-inner'); 
                if( element.hasClass('ng-invalid-required') ){
                    target.html(attrs.wvReq);
                    attrs.wvCur = attrs.wvReq;
                    parent.addClass('error');
                }
                else if( element.hasClass('ng-invalid-email') ){
                    target.html(attrs.wvEml);   
                    attrs.wvCur = attrs.wvEml;
                    parent.addClass('error');   
                }
                else if (element.hasClass('ng-invalid-name-exists')) {
                    target.html(attrs.wvNam);
                    attrs.wvCur = attrs.wvNam;
                    parent.addClass('error');
                }
                else if( element.hasClass('ng-invalid-minlength') ){
                    target.html(attrs.wvMin);   
                    attrs.wvCur = attrs.wvMin;
                    parent.addClass('error');   
                }
                else if( element.hasClass('ng-invalid-maxlength') ){
                    target.html(attrs.wvMax);   
                    attrs.wvCur = attrs.wvMax;
                    parent.addClass('error');
                }
                else if( element.hasClass('ng-invalid') ){
                    target.html(attrs.wvErr);
                    attrs.wvCur = attrs.wvErr;
                    parent.addClass('error');   
                }
                else{
                    target.html(attrs.wvDef);
                    attrs.wvCur = attrs.wvDef;
                    parent.removeClass('error');    
                }
            });

            element.focus(function(){
                //attrs.title = attrs.wvCur;

                setTimeout(function(){
                    parent = $('.tooltip');
                    target = parent.find('.tooltip-inner'); 
                    target.html((attrs.wvCur != "" ? attrs.wvCur : attrs.wvDef));
                    if( attrs.wvCur != attrs.wvDef && attrs.wvCur != "" )
                        parent.addClass('error');
                },5);
            });
        }
    };
});

PS:我正在为此使用 Twitter 引导工具提示

【问题讨论】:

  • 您是否尝试过使用该正则表达式设置$scope 变量,然后将该变量用作ng-pattern 的参数?
  • @FooL 为什么要这样做?我的意思是,例如,如果我有 50 个字段并且每个字段都有不同的ng-pattern,那么我应该在控制器的$scope 中设置所有这些吗?这太疯狂了,但回答你的疑问,不,我没有尝试过
  • @j.wittwer 如果我输入字母而不是数字,这是默认显示的错误
  • wv-err 是什么?它是在哪里定义的?
  • @Mosho 我已经回答了 j.wittwer 用户

标签: javascript angularjs twitter-bootstrap


【解决方案1】:

ng-model 属性不是可选的(如 here 所示)。您确实分配了它,但它需要实际存在于范围中。所以你需要提供一个带有控制器的作用域以及一个在ng-model中引用的有效变量。

这是一个有效的example。您可以看到,如果您删除或以其他方式使分配给 ng-model 的范围变量无效,它将停止工作。

这将解决问题,但总的来说,我建议您实现您想要做的更接近 angular 文档中显示的内容。

编辑:这是您的代码的工作版本:demo

但是,您不能像您尝试做的那样使用attr 设置元素属性。你必须使用element。而且它没有工具提示元素(您可以添加它)。我再次强烈建议你看看here,也许看看一些角度教程和示例,并尝试以这种风格重写你的代码。

【讨论】:

  • 我应该在输入中写些什么才能看到你的例子?我尝试使用oooooo 并没有工作
  • 有什么建议可以将此添加到我的指令中以解决此问题?我的意思是我得到了控制器的解决方案,但仍然不知道如何添加到指令并使其工作
  • 已编辑。记下我的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多