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);
相关推荐
liulilittle2 分钟前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路
江城开朗的豌豆3 分钟前
React状态更新踩坑记:我是这样优雅修改参数的
前端·javascript·react.js
阿珊和她的猫23 分钟前
autofit.js: 自动调整HTML元素大小的JavaScript库
开发语言·javascript·html
喜欢吃燃面43 分钟前
C++算法竞赛:位运算
开发语言·c++·学习·算法
草莓熊Lotso1 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
谱写秋天1 小时前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
项目申报小狂人1 小时前
算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
开发语言·算法·matlab
阿珊和她的猫5 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234177 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart