每年,我都有一张包含约100行数据的电子表格需要通过笨拙的表单逐行提交到一个网站。为了不浪费时间手动填写100次表单,我花费了时间编写一些JavaScript代码来处理它。
这段代码已经服务了我3年,但现在他们升级到了Angular JS应用程序,现在我不确定如何像人类一样填写这些表单。
以这个Angular表单为例:https://codepen.io/sevilayha/full/xFcdI/ 之前,我能够设置元素的值,点击它们以确保脏状态被触发,点击提交,然后就完成了,但对于Angular应用程序似乎不起作用。
手动单击脚本填充字段后会触发一个dirty状态,但我找不到任何事件(change、keyup、keydown等)可以通过编程触发它。
如何使用纯JavaScript成功填写和提交Angular应用程序中的表单?
这段代码已经服务了我3年,但现在他们升级到了Angular JS应用程序,现在我不确定如何像人类一样填写这些表单。
以这个Angular表单为例:https://codepen.io/sevilayha/full/xFcdI/ 之前,我能够设置元素的值,点击它们以确保脏状态被触发,点击提交,然后就完成了,但对于Angular应用程序似乎不起作用。
function setAndClick(selector, value) {
const el = document.querySelector(selector);
el.value = value;
el.click();
}
setAndClick('[name="name"]', 'Happy Robot');
setAndClick('[name="username"]', 'happyrobot');
setAndClick('[name="email"]', 'happy@robot.com');
手动单击脚本填充字段后会触发一个dirty状态,但我找不到任何事件(change、keyup、keydown等)可以通过编程触发它。
如何使用纯JavaScript成功填写和提交Angular应用程序中的表单?
$digest
循环,它将每个表单元素的ng-model
支持的变量状态与输入状态进行匹配。通过编程方式更改输入不会触发$digest
,因此外部更改不会反映出来,而任何*触发$digest
的内容都可能会清除这些外部更改。您需要钩入页面上的angular应用程序并使用$scope.$apply()
手动触发$digest
,但在那时,您可能应该直接更改变量值,而不是将值注入到输入中。 - Claies