js手动触发事件dispatchEvent()

2023-11-07

创建并触发事件

有两种方法可以实现手动触发事件,一种是如下所示的过时的繁琐的方式创建事件对象并触发事件:create--init--dispatch,还有一种(不兼容IE,但是建议使用)参考另一篇JavaScript原生实现事件监听及手动触发

下面的方法将要从规范移除,除非真的需要,否则建议不要再使用了。

1. createEvent(eventType)
参数:eventType 包含许多种类型:

  • Events :包括所有的事件. 
  • HTMLEvents:包括 'abort', 'blur', 'change', 'error', 'focus', 'load', 'reset', 'resize', 'scroll', 'select',  'submit', 'unload'. 事件
  • UIEvents :包括 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'keydown', 'keypress', 'keyup'.间接包含 MouseEvents. 
  • MouseEvents:包括 'click', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup'. 
  • MutationEvents:包括 'DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMNodeInsertedIntoDocument',  'DOMNodeRemovedFromDocument', 'DOMSubtreeModified'. 

更多类型可以参考createEvent

2. 在createEvent后必须初始化,为大家介绍上面5种对应的初始化方法

  • HTMLEvents 和 Events:都使用 initEvent( 'type', bubbles, cancelable )
  • UIEvents :initUIEvent( 'type', bubbles, cancelable, windowObject, detail )
  • MouseEvents:initMouseEvent( 'type', bubbles, cancelable, windowObject, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget )
  • MutationEvents :initMutationEvent( 'type', bubbles, cancelable, relatedNode, prevValue, newValue, attrName, attrChange ) 

更详细的说明同样可以参考createEvent,查看事件对应的初始化方法。

3. 在初始化完成后就可以随时触发需要的事件了,为大家介绍targetObj.dispatchEvent(event)
    使targetObj对象的event事件触发

  需要注意的是在IE 5.5+版本上请用fireEvent方法,这是浏览器兼容的问题。

4. 例子

//例子1  立即触发鼠标点击事件
var fireOnThis = document.getElementById('someID');
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent( 'click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
fireOnThis.addEventListener("click", function() { console.log("click触发了"); });
fireOnThis.dispatchEvent(evObj);

//例子2  考虑兼容性的一个鼠标移动事件
var fireOnThis = document.getElementById('someID');
if( document.createEvent ) 
{
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent( 'mousemove', true, false );
    fireOnThis.dispatchEvent(evObj);
} else if( document.createEventObject ) {
    fireOnThis.fireEvent('onmousemove');
}

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0">
    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
    <title></title>
    
</head>
<body>
    <div id="a" onclick="alert(1);">321321</div>
    
    <script type="text/javascript">
        // 立即触发鼠标按下事件
        var fireOnThis = document.getElementById('a');
        var evObj = document.createEvent('MouseEvents');
        evObj.initMouseEvent('click',true,true,window,1,12,345,7,220,false,false,true,false,0,null);
        fireOnThis.dispatchEvent(evObj);
    </script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js手动触发事件dispatchEvent() 的相关文章

  • 如何检查 JSON 对象数组是否包含数组中定义的值?

    我有以下 JSON 数据 categories catValue 1 catName Arts crafts and collectibles catValue 2 catName Baby catValue 3 catName Beaut
  • AngularJS 和 Django 的 DOM、JavaScript 和服务器端数据库之间是否存在三向数据绑定框架?

    AngularJS 爱好者兜售的功能之一是该框架提供的 DOM 内容和 JavaScript 数据之间的双向数据绑定 我目前正在开发几个集成 AngularJS 和 Django 的学习项目 其中一个痛点是 AngularJS 解决的 Ja
  • 具有多个参数的 JavaScript 函数

    我有一个将数组作为输入的函数 我如何修改它以使用变量参数和数组 例如我想要arrSum 1 2 3 arrSum 1 2 3 回来true即两者都应该返回 6 const arrSum arr gt arr reduce a b gt a
  • JavaScript 和数据库连接

    javascript可以直接访问数据库吗 我觉得我的问题是反问 因为这是一个安全问题 但这有可能吗 有可能的 有了新的html5功能 js可以通过WebSql连接 一个活生生的例子 http html5demos com database
  • 使用 Javascript 从 URL 字符串获取端口 [重复]

    这个问题在这里已经有答案了 我想要一个 javascript 函数 它将获取一个 url 作为参数 并返回该 URL 的端口 如下所示 如果有一个http or https 端口 80 443 它不会显示在 url 结构中 但我还是希望它们
  • Javascript:无法停止setTimeout

    我正在开发一个代理服务器检查器 并使用以下代码使用 setTimeout 函数以大约 5 秒的间隔启动请求 function check var url document getElementById url value var proxy
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 使用 ChartJS v2.0 自定义图例

    我正在尝试在 ChartJS v2 0 中创建自定义图例模板 在 ChartJS v1 中 我只是向新的 Chart 构造函数添加了一个属性 例如 legendTemplate ul li span style background col
  • 字符串编码器固定大小输出

    我接到一个任务 需要编写一个具有以下要求的编码器 输入 1 到 8 位的整数 即 12345678 2352 76543 输出 固定大小的 6 位代码 可以包含任何字母数字和符号 a z A Z 0 9 该操作必须是可逆的 因此给定一个代码
  • 弹出窗口显示来自 php 和 javascript 的结果

    我正在尝试实现 javascript 来显示 php 的结果 基本上 我有一个登录页面 对于登录失败 我希望结果显示在弹出窗口中 而不是仅仅用 php 回显它们 我尝试实现警报框 但看起来我错过了一些东西 成功登录将被重定向到logged
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 在 JavaScript 中将整数数组转换为字符串数组

    我有一个如下所示的数组 var sphValues 1 2 3 4 5 然后我需要转换上面的数组 如下所示 var sphValues 1 2 3 4 5 我怎样才能转换 我用它来自动完成 您可以使用map https developer
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 避免使用 Grunt cssmin 任务来删除重复条目

    在我的 Gruntfile 中 我使用 cssmin grunt contrib cssmin 任务 就像是 cssmin css src dist styles css dest dist styles min css 问题是 style
  • Chrome 扩展允许的键盘快捷键

    当您创建 Chrome 浏览器扩展程序时 您可以通过实现来建议键盘快捷键chrome 命令 https developer chrome com extensions commandsAPI 是否有允许的组合键的记录列表 Chrome 似乎
  • 我们可以使用 axios 的 onDownloadProgress 来加载 API 吗?

    我需要使用 axios 创建一个用于在 React 项目中加载 API 的进度条 我为此发现了 onDownloadProgress 函数 但我不知道我们是否可以使用它来获取诸如加载百分比之类的信息 或者它是否仅用于文件下载 所以我不确定我
  • 是否可以使用 JavaScript 检查加载的图像大小

    这是一个完全愚蠢的问题 但我只是想澄清我的疑问 当图像加载时 我们可以使用以下命令检查加载状态onload or oncomplete事件 但我只是想知道有多少部分图像是使用 JavaScript 加载的 真的可能吗 我的问题是 我们可以从
  • JSON 和 AJAX 与 jQuery 有什么区别?

    我听说 JSON 会序列化所有数据 这可以防止我在跨浏览器支持等方面遇到客户端问题 我一直在使用 AJAX 和 jQuery 这看起来很简单 但我不确定其中的区别 我读过我也可以使用它来获取数据 ajax url url dataType
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • Selenium - 运行 javascript

    我有一个愚蠢的问题 如何运行位于测试站点上的脚本 我可以运行警报 但我无权访问我编写的脚本 我尝试过 runscript geteval 没有任何效果 由于 Selenium 是用 JavaScript 编写的 因此 window 对象会移

随机推荐

  • 美的年营收3412亿:净利286亿 何享健控制31.5%股权

    雷递网 雷建平 5月4日报道 美的日前公布年报 年报显示 美的2021年营收为3412亿元 较上年同期的2842亿元增长20 06 美的2021年净利为285 74亿元 较上年同期的272 23亿元增长4 96 扣非后净利为259 29亿元
  • oracle数据库中varchar类型字段中存放的有数字和汉字情况,比较大小问题解决

    如果你也正在为这种问题头疼 当你看到我这篇博客时 恭喜你 问题的解决方案来了 你头疼的问题可以解决了 这个问题是我在最近的项目中遇到的难题 上网查阅了很多资料 用什么平常使用的 lt lt gt gt 都没能解决问题 最后还是问了大牛 才解
  • SpringCloudGateway集成SpringDoc CORS问题

    SpringCloudGateway集成SpringDoc CORS问题 集成SpringDoc后 在gateway在线文档界面 请求具体的服务接口 报CORS问题 Failed to fetch Possible Reasons CORS
  • 2.5 使用SolidWorks转换STL格式为OBJ文件格式

    1 说明 使用SW进行三维模型建模 一般应用在机械工程领域中 将模型保存成STL格式后 转换为 obj文件 才能进一步转换为mesh文件 供QT中的3D控件进行使用 本文章记录一些格式转换步骤和关键点 以便参考 2 第一步 首先在SW软件界
  • easyui怎样实现textarea

    uqery easyui 本身没有实现textarea的封装 用的知识html元素 但是提供了textarea的验证器
  • cpp:State Pattern

    file Gold h brief State Pattern 状态模式 C 14 2023年5月29日 涂聚文 Geovin Du Visual Studio 2022 edit author geovindu date May 2023
  • PADS生成SMT坐标文件

    做SMT时 除了 gerber文件 外 还要提供 BOM文件 和 坐标文件 gerber文件 和 BOM文件 前面都有介绍过了 现在详细说一下生成 坐标文件 的方法 贴片厂家提供了操作教程 如下 所以 我们点开厂家的教程 按步骤操作即可 参
  • ImageMagick任意文件读取漏洞(CVE-2022-44268)

    0x00 前提 前几天爆出一个 ImageMagick 漏洞 可以造成一个任意文件读取的危害比较可观 最近有时间来复现学习一下 主要是影响的范围很大 很多地方都有这个问题 需要来学习一下 0x01 介绍 ImageMagick 是一个免费的
  • 粒子群算法(PSO)

    这几天看书的时候看到一个算法 叫粒子群算法 这个算法挺有意思的 下面说说我个人的理解 粒子群算法 PSO 是一种进化算法 是一种求得近似最优解的算法 这种算法的时间复杂度可能会达到O n 得到的结果不一定是最优解 往往已经很接近最优解了 最
  • 基于OFDM的水下图像传输通信系统matlab仿真

    目录 1 算法运行效果图预览 2 算法运行软件版本 3 部分核心程序 4 算法理论概述 5 算法完整程序工程 1 算法运行效果图预览 2 算法运行软件版本 matlab2022a 3 部分核心程序 function rx img func
  • 日本語 第二十二課

    森 毎晩 見 森先生每天晚上看电视 昨日 忙 昨天特别忙 簡単 电脑操作起来不简单 今日 曇 今天是阴天 明日 行 明天去打保龄球啊 明日 仕事 对不起 明天有工作啊 昨日 試験 昨天的考试怎么样啊 難 有一点难 但是都答上了 派手 这个领
  • 蓝桥杯题解 寻找2020 Java答案

    import java util ArrayList import java util Scanner public class Main static Scanner s new Scanner System in static Stri
  • QMap详解

    QMap详解 QMap是Qt的一个模板类 它是基于红黑树算法的一套字典 QMap
  • qml向Qt的C++传数组参数

    我们都知道qml和C 可以进行交互 但数据交互的过程中 一般只限于内置类型 比如int bool double等 如果是json或数组由C 传给qml qml是可以解析的 但如果是qml传数组给C 呢 该如何传参及解析数组参数呢 C 中通过
  • 【模板】高精度加高精度

    文章目录 1 数组 2 vector 推荐 下面这题是高精度加高精度的模板题 洛谷 P1601 A B Problem 高精 1 数组 include
  • 队列的概念及结构(内有成型代码可供CV工程师参考)

    目录 前言以及队列全部代码 CV工程师点这里 一 队列的概念 二 队列的实现 三 代码实现以及详细解释 1 初步介绍 2 定义结构体 以及栈内数据类型 3 初始化队列 4 队列的销毁 5 队列插入元素 尾插 6 删除队头元素 7 返回队头元
  • 51单片机:定时器/计数器TMOD设定

    51单片机 定时器 计数器TMOD设定 TMOD格式 上图为TMOD格式 8位分为两组 高四位控制T1 低四位控制T0 TMOD各位的说明 GATE 0 仅由运行控制位TRx x 0 1 来控制定时器 计数器运行 1 用外中断引脚 INT0
  • 【linux】Linux cp命令拷贝 不覆盖原有的文件

    文章目录 print和printf输出重定向 print items gt output file 保存items到文件 如分别保存用户和家目录 awk F print 1 gt username print 6 gt home etc p
  • MyBatisPlus(三)基础Service接口:增删改查

    MyBatisPlus 基础Service接口 增删改查 使用 MyBatisPlus 的 Service 接口 实现基础的增删改查功能 创建Service 创建Service 继承自MyBatisPlus提供的Service接口 代码 p
  • js手动触发事件dispatchEvent()

    创建并触发事件 有两种方法可以实现手动触发事件 一种是如下所示的过时的繁琐的方式创建事件对象并触发事件 create init dispatch 还有一种 不兼容IE 但是建议使用 参考另一篇JavaScript原生实现事件监听及手动触发