Javascript ng模式是否错误并不表示';不允许触发工具提示
我在一个输入字段中使用这个Javascript ng模式是否错误并不表示';不允许触发工具提示,javascript,angularjs,twitter-bootstrap,Javascript,Angularjs,Twitter Bootstrap,我在一个输入字段中使用这个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-inva
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"
>
注:我正在使用Twitter引导工具提示来实现此功能,
ng model
属性不是可选的(如图所示)。您确实分配了它,但它需要实际存在于范围中。因此,您需要提供一个带有控制器的作用域以及一个有效变量,以便在ng model
中引用
这是一张工作票。您可以看到,如果删除或以其他方式使分配给ng model
的范围变量无效,它将停止工作
这将解决这个问题,但总的来说,我建议你实现你想要做的事情,更接近angular的文档中显示的内容
编辑:以下是代码的工作版本:
但是,不能像您尝试的那样使用
attr
设置元素属性。您必须使用元素
。而且它没有tooltip元素(您可以添加它)。再一次,我强烈建议您看一看,或者看一些角度教程和示例,并尝试以这种方式重写代码。您是否尝试过使用该正则表达式设置$scope
变量,然后使用该变量作为ng模式的参数?@傻瓜为什么这样做?我的意思是,如果我有50个字段,每个字段都有不同的ng模式
,那么我应该在控制器的$scope
中设置所有这些?这很疯狂,但回答你的疑问,不,我没有试过that@j.wittwer如果我输入字母而不是数字,这是默认显示的错误。什么是wv err
?它是在哪里定义的?@Mosho我已经向j.wittwer用户回答了这个问题,我应该在输入中写些什么才能看到你的例子在起作用?我尝试了oooooo
,但没有任何建议将其添加到我的指令中以解决问题?我的意思是,我得到了控制器的解决方案,但仍然不知道如何添加到指令并使其成为workEdited。注意我的建议。
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);
});
}
};
});