我使用以下代码填写表单字段,但它没有将ng-pristine更改为ng-dirty。
$("#username").keypress(function(event) {
var key = event.keyCode || event.which;
$('#username').val($('#username').val() + String.fromCharCode(key));
});
$('#username').trigger(jQuery.Event('keypress', {which: 77}));
是否有任何功能可以精确模拟真正的键盘按键?
答案 0 :(得分:2)
嗯,这里有两件事 - 按键和真正的用户发起keyPress之间的区别以及你的代码无法正常工作的原因。
让我们开始解释为什么你的代码不起作用 - Angular知道如何通过称为摘要周期的东西来更新它的DOM。它通过让每个Angular系统函数安排一个摘要(如果一个尚未进行)来实现这一点。
您的代码需要通过调用$rootSCope.$apply()
来模拟这一点。
另外,考虑不使用jQuery操作DOM,而是使用Angular代替任务 - 更改值 #username绑定到控制器范围。
一个是值得信赖的DOM事件,另一个不是 - 虽然这不是什么大问题,也不是导致问题的原因。当您触发事件时,与DOM的某些交互不会发生,但会发生真实的用户交互 - 这是一个安全功能,不会在这里发挥作用。
答案 1 :(得分:0)