这是一个棘手的问题。我正在编写一个Tampermonkey(用于chrome的vanilla JS注入器插件)脚本,以自动化我每天用于工作数百次的第三方网站。我坚持的部分是我相信一个AngularJS表格(下面的代码)。我需要更改输入的值并提交它,以便它可以更新网站上的表格。请注意,它不会重新发布该网站,它适用于ajax / jquery / AngularJS(不知道)。
我注意到棘手的部分在于输入," ng-pristine ng-valid"似乎是一些AngularJS数据验证,这是提交表单所必需的,虽然我不知道如何在更改输入值或如何提交表单后触发它。改变价值似乎有效。整个表单都在iframe中,但不确定这是否有所不同。
我已经添加了以下元素的ID,因此更容易引用这些元素,但它们通常不存在于代码中,我通过querySelectors获取它们
<form id="form" ng-submit="updateTab()" class="ng-pristine ng-valid">
<div class="input">
<div class="input__container">
<input id="input" type="text" class="input ng-pristine ng-valid" ng-model="QueryParams.query">
<button id="button" class="button">Search</button>
</div>
</div>
</form>
在完成设置值并单击按钮之前,我已做过很多次这样的事情:
document.getElementById("input").value = "some value";
document.getElementById("button").Click();
但它不起作用。在值更改之后和之前的.click()之前我也尝试过以下操作,因为似乎有一些数据验证,但它仍然没有帮助。
document.getElementById("input").dispatchEvent(new Event("change"));
document.getElementById("input").onchange();
提交表单只是重新加载网站,但没有取得任何成果。
答案 0 :(得分:1)
有很多方法可以解决这个问题,哪种方法是正确的,通常是特定于方案的。这个问题:Angular.js programmatically setting a form field to dirty列出了其中的一些问题。