本篇博文旨在记录做RPA流程时遇到更改输入框的value后前端的后台数据没变的情况时的解决方案。
主要思路是先创建几个事件,然后使用DOMElement.dispatch()方法触发事件。
代码如下:
1 2 3 4 5 6 7 8 9 10 11
| var input = document.getElementById("compose_preload").contentDocument.querySelector("#ccContainer > div > div.ItemContainer.writeTable-txt.clearfix > div.addrText > input") input.value = cc; var event = document.getElementById("compose_preload").contentDocument.createEvent('HTMLEvents'); event.initEvent("input", true, true); input.dispatchEvent(event); var event = document.getElementById("compose_preload").contentDocument.createEvent('HTMLEvents'); event.initEvent("blur", true, true); input.dispatchEvent(event); var event = document.getElementById("compose_preload").contentDocument.createEvent('HTMLEvents'); event.initEvent("change", true, true); input.dispatchEvent(event);
|
其中”document.getElementById(“compose_preload”).contentDocument”这段代码是在有iframe的情况下才这么写的,即要将Event创建在input对应的文档下。如果目标元素外面没有套iframe标签,可以直接document.createEvent创建事件。