js自动模拟用户键盘输入/自动触发输入事件/自动触发input事件

起因:Chrome扩展的时候,input 框自动填写内容后,无法触发表单的提交,需要出发input事件。

解决方式: 参考 https://blog.csdn.net/weixin_42649856/article/details/128582733 的解决办法。

代码:

javascript 复制代码
// 获取 input 输入框的dom对象
var element_input = window.document.querySelector('input');

// JavaScript 中的 `_valuetracker` 方法常常用于监听 HTML 表单元素(如 input,select,textarea 等)的值变化,并在每次值发生变化时执行回调函数。
if(element_input._valueTracker) var _templMethod = element_input._valueTracker.getValue;
if(element_input.getValue) var _templMethod = element_input.getValue;
if(element_input._valueTracker) element_input._valueTracker.getValue = () => '';

// 修改input的值
element_input.value = '123';

// 设置输入框的 input 事件
var event = new InputEvent('input', {
   'bubbles': true,		// 表示事件对象是否冒泡
   'cancelable': true,	// 表示事件是否可以被取消,即能否用Event.preventDefault()取消这个事件。
});
// 触发 dom 对象的 input 事件
element_input.dispatchEvent(event);

// 将`_valuetracker`的值(方法)重新绑定
if(element_input._valueTracker) element_input._valueTracker.getValue = _templMethod;

直接用上面代码就可以。

注意: 如果获取不到 _valuetracker 的话,直接用下面的代码也是可以的,我就遇见到无法获取 _valuetracker 的情况

javascript 复制代码
// 获取 input 输入框的dom对象
var element_input = window.document.querySelector('input');

// 修改input的值
element_input.value = '123';

// 设置输入框的 input 事件
var event = new InputEvent('input', {
   'bubbles': true,		// 表示事件对象是否冒泡
   'cancelable': true,	// 表示事件是否可以被取消,即能否用Event.preventDefault()取消这个事件。
});
// 触发 dom 对象的 input 事件
element_input.dispatchEvent(event);
相关推荐
橙*^O^*安20 分钟前
Go 语言基础:变量与常量
运维·开发语言·后端·golang·kubernetes
NiKo_W23 分钟前
Linux 文件系统与基础指令
linux·开发语言·指令
工程师小星星29 分钟前
Golang语言的文件组织方式
开发语言·后端·golang
乂爻yiyao29 分钟前
java 代理模式实现
java·开发语言·代理模式
博客zhu虎康1 小时前
React Hooks 报错?一招解决useState问题
前端·javascript·react.js
张子夜 iiii1 小时前
实战项目-----Python+OpenCV 实现对视频的椒盐噪声注入与实时平滑还原”
开发语言·python·opencv·计算机视觉
灰海1 小时前
vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
前端·javascript·vue.js·heatmap·heatmapjs
2301_770373731 小时前
Java集合
java·开发语言
啊?啊?2 小时前
18 从对象内存到函数调用:C++ 虚函数表原理(继承覆盖 / 动态绑定)+ 多态实战
开发语言·c++·多态原理
bkspiderx2 小时前
C++标准库:文件流类
开发语言·c++