Jquery 如何向html元素动态添加ng模式属性?
我的应用程序中有一个多用途模式对话框,只有一个文本输入。 有时我只需要任何文本,有时我想限制文本以匹配正则表达式模式 我尝试用jQueryJquery 如何向html元素动态添加ng模式属性?,jquery,html,angularjs,Jquery,Html,Angularjs,我的应用程序中有一个多用途模式对话框,只有一个文本输入。 有时我只需要任何文本,有时我想限制文本以匹配正则表达式模式 我尝试用jQueryattr添加正则表达式,如下所示: $("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/"); var regexp = /.*imdb\.com\/title\/.*/; $("#popupTextInput").attr("ng-pattern", regexp); 不起作用
attr
添加正则表达式,如下所示:
$("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
var regexp = /.*imdb\.com\/title\/.*/;
$("#popupTextInput").attr("ng-pattern", regexp);
不起作用。当我检查呈现的元素时,元素上会出现正确的ng pattern
指令,但formname.$valid
始终为真,无论我输入什么
当我手动添加属性(在firebug中具有完全相同的外观)时,它会按预期工作
我还尝试将正则表达式模式直接添加到属性中,而不是使用模式字符串,如下所示:
$("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
var regexp = /.*imdb\.com\/title\/.*/;
$("#popupTextInput").attr("ng-pattern", regexp);
但这也不行
我很困惑。有人能解释一下吗?
我可能应该提到,我在创建模态之前添加了属性
预计到达时间:
做了一些进一步的实验。我尝试在默认情况下在输入上使用ng模式,并在不需要时删除。
类似的事情发生了:
当我删除ng模式时,它将从元素中删除(至少检查没有显示它),但正则表达式模式仍然有效。
我尝试了下面的$scope.$apply建议(在$apply中有和没有函数),但没有效果。尝试使用$scope.$apply()代码>在使用jQuery之后
$scope.$apply( function() {
$("#popupTextInput").attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
});
这将导致您的绑定更新,并可能修复该问题
要了解更多信息,请查看并
看完后好吗
我认为正确的方法是
parent = $("#popupTextInput").parent();
var newInput = $("#popupTextInput").clone();
$("#popupTextInput").remove();
newInput.attr("ng-pattern", "/.*imdb\.com\/title\/.*/");
var compiledElement = $compile(newInput)($scope);
parent.append(compiledElement);
感谢您的建议,但这也不起作用。$scope.$apply()
应该包装jQuery DOM操作:$scope.$apply(function(){//what your want apply})代码>我按照建议做了,但这次ng模式根本没有出现在输入上。您是否可以有两个输入并禁用和隐藏相应的输入。尽管动态添加ng-attributes仍然值得研究。好的,在深入研究之后,我认为正确的方法是在插入Angular之前使用$compile。