javascript - 小部件的预填充字段
问题描述
我必须在我的网站上使用一个小部件。我无权访问小部件源代码(缩小、混淆)。小部件适用于我的 DOM 插入一些 div,而不是框架。小部件可能是使用 react 构建的(某些 div 上的react前缀)。
用例:用户填写小部件表单,单击“发送”并获得一些反馈。为了改善用户体验,我想预先填写这些字段。
据小部件公司称,没有办法做到这一点。
我没有反应的经验。
到目前为止我已经尝试过:
在 DOM 准备好 -> 部分工作后为输入设置一个值。字段是预填充的,但是如果我尝试更改其中之一,值就会消失。我认为,值存储在其他地方,并且只复制到输入。
尝试在值更改后手动触发输入事件(更改、焦点、keyup)以初始化小部件脚本 -> 无结果。
试图模拟按键事件 -> 遇到浏览器安全问题。
还有什么我可以做的吗?
解决方案
当涉及到更改输入值时,React 会使用一些技巧,因为它会覆盖元素的默认 getter/setter,value
并且input
它有自己的值跟踪器。要在 React 中处理更改,您需要使用本机value
setter 为输入提供新值,然后调度输入事件:
const App = () => <input id="input" onChange={({target: {value}}) => console.log(`input event handled in React with value: ${value}`)} />
ReactDOM.render(<App/>, document.getElementById("root"));
document.getElementById("dispatch-fake-event").addEventListener("click", () => {
const inputEl = document.getElementById("input");
Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value").set.call(
inputEl,
"new value"
);
const event = new Event("input", {
bubbles: true,
cancelable: false
});
inputEl.dispatchEvent(event);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.development.js"></script>
<div id="root"></div>
<button id="dispatch-fake-event">dispatch fake event</button>
推荐阅读
- c++ - 静态变量的范围到几个文件 C++
- c# - 如何从 KeyValuePair 的输出中删除方括号
? - xcode - 观看扩展 iCloud 功能,哪个目标?
- angular - UseSpa() 从 API 返回 index.html 而不是 404
- java - 使用 Hibernate 进行逻辑删除和创建
- apache - 带有正则表达式的 Apache LocationMatch 不起作用
- python - ResolvePackageNotFound 创建 conda 环境时出错
- reactjs - 为什么我会收到 React 错误“无法读取属性”
- java - 使用选择查询从数据库中读取的批处理 Tasklet
- discord.py - 如果用户放置不存在的子命令,我如何显示消息?