Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何向html元素动态添加ng模式属性?_Jquery_Html_Angularjs - Fatal编程技术网

Jquery 如何向html元素动态添加ng模式属性?

Jquery 如何向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); 不起作用

我的应用程序中有一个多用途模式对话框,只有一个文本输入。 有时我只需要任何文本,有时我想限制文本以匹配正则表达式模式

我尝试用jQuery
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。