按键事件和真正的键盘按键有什么区别?

时间:2015-04-16 15:47:51

标签: javascript jquery angularjs

我使用以下代码填写表单字段,但它没有将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}));

是否有任何功能可以精确模拟真正的键盘按键?

2 个答案:

答案 0 :(得分:2)

嗯,这里有两件事 - 按键和真正的用户发起keyPress之间的区别以及你的代码无法正常工作的原因。

为什么你的代码不起作用

让我们开始解释为什么你的代码不起作用 - Angular知道如何通过称为摘要周期的东西来更新它的DOM。它通过让每个Angular系统函数安排一个摘要(如果一个尚未进行)来实现这一点。

您的代码需要通过调用$rootSCope.$apply()来模拟这一点。

另外,考虑不使用jQuery操作DOM,而是使用Angular代替任务 - 更改 #username绑定到控制器范围。

至于差异

一个是值得信赖的DOM事件,另一个不是 - 虽然这不是什么大问题,也不是导致问题的原因。当您触发事件时,与DOM的某些交互不会发生,但会发生真实的用户交互 - 这是一个安全功能,不会在这里发挥作用。

答案 1 :(得分:0)

感谢此链接:

http://inching.org/2014/08/19/javascript-key-event-simulate/

这个模拟真正的按键。