我正在尝试在输入中设置用户名。它填充输入并运行按键事件,但它不会将ng-pristine更改为ng-dirty。有什么想法吗?
我的代码:
var username = ["u", "s", "e", "r"];
$("#username").keypress(function(event) {
var key = event.keyCode || event.which;
$('#username').val($('#username').val() + String.fromCharCode(key));
});
for (var i=0;i< username.length;i++){
var c = username[i];
$('#username').trigger(jQuery.Event('keypress', {which: c.charCodeAt(0)}));
};
答案 0 :(得分:2)
当您在角度范围内工作时,需要手动触发$scope.$apply()
以触发更改。您还必须手动设置标记setDirty()
。
获取您当前正在处理的控制器范围的参考。
var scope = angular.element(document.querySelector("controllerSelector")).scope();
现在在你的按键事件中,触发摘要周期。
var username = ["u", "s", "e", "r"];
$("#username").keypress(function(event) {
var key = event.keyCode || event.which;
$('#username').val($('#username').val() + String.fromCharCode(key));
scope.$apply();
});
for (var i=0;i< username.length;i++){
var c = username[i];
$('#username').trigger(jQuery.Event('keypress', {which: c.charCodeAt(0)}));
scope.$apply();
};
这必须主要解决您的问题。如果没有,您可能需要手动触发setDirty()
。在范围内指向表单并设置脏标志。
scope.formName.$setDirty();
答案 1 :(得分:-1)
为什么要混合jquery和angular?你永远不应该这样做。如果您想收听更改事件或点击次数。将ng-click或ng-change附加到dom元素或在控制器中设置$ watch以侦听对模型的任何更改。在同一个项目中混合使用jquery选择器和angular是不好的做法。 Angular具有您希望摆脱jquery的所有功能。