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);
相关推荐
码兄科技11 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
Drone_xjw12 小时前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
SL-staff13 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
2zcode14 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
必须得开心呀15 小时前
QT解决中文乱码问题
开发语言·qt
Jackson__15 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
林小帅16 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端
这不小天嘛16 小时前
JAVA八股——redis篇
java·开发语言·redis
Hilaku17 小时前
为什么你的大文件断点续传,一遇到弱网就崩溃?
前端·javascript·程序员
逝水无殇17 小时前
C# 字符串(String)详解
开发语言·后端·c#