如何使用jQuery以编程方式将ng-pristine设置为ng-dirty?

时间:2015-04-16 14:10:49

标签: javascript jquery html angularjs

我正在尝试在输入中设置用户名。它填充输入并运行按键事件,但它不会将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)}));
};

2 个答案:

答案 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的所有功能。