我的应用程序中有一个带有一个文本输入的多功能模式对话框。有时我只需要任何文本,有时我想限制文本以匹配正则表达式模式。
我试图attr
像这样用jQuery添加正则表达式:
$("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
不起作用 当我检查渲染的元素时,正确的ng-pattern
指令会出现在元素上,但是formname.$valid
无论输入什么,它始终是正确的。
当我手动添加属性(在萤火虫中具有完全相同的外观)时,它可以按预期工作。
我还尝试过将正则表达式模式直接添加到属性中,而不是使用模式字符串:
var regexp = /.*imdb\.com\/title\/.*/;
$("#popupTextInput").attr("ng-pattern", regexp);
但这也不起作用。
我很困惑。有人能对此有所启示吗?我应该提到在创建模态之前添加属性。
ETA:做了一些进一步的实验。我尝试在输入上默认使用ng-pattern,并在不需要时将其删除。发生了类似的事情:当我删除ng-pattern时,它已从元素中删除(至少检查没有显示出来),但是regex模式仍然有效。我在下面尝试了$ scope。$ apply建议(在$ apply中有和没有功能),但是它没有效果。
$scope.$apply();
在使用jQuery之后立即尝试使用。
$scope.$apply( function() {
$("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
});
这将导致您的绑定更新,并可能解决该问题。
要了解更多信息,请查看有关$ apply的堆栈溢出问题以及Jim Hoskin关于$ apply的文章。
好吧,看完这篇
我认为正确的解决方法是。
parent = $("#popupTextInput").parent();
var newInput = $("#popupTextInput").clone();
$("#popupTextInput").remove();
newInput.attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
var compiledElement = $compile(newInput)($scope);
parent.append(compiledElement);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句