问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样用原生JavaScript实现jQuery的trigger函数

发布网友 发布时间:2022-05-05 23:40

我来回答

2个回答

懂视网 时间:2022-05-15 12:00

项目过程中会使用到用户触发了一个事件,需要对另外一个元素同样进行触发相应的事件然后执行相应的代码,jquery中就可以通过trigger实现

trigger API

这里写图片描述

今天想了一下,如果没有jq,那用js是怎么实现的呢?最近第二次看《javascript高级程序设计》这边书又有了一些收获。
如果是实现触发click事件,第一印象肯定是直接element.click(); 就可以了,那触发dbclick、mouseleave、focus 、mouseenter等事件是不是也可以直接element.mouseleave()呢?

于是执行了一下发现,报错了!没错并不是简单的加个element.eventType()这样就可以直接触发相应的事件了。

这里写图片描述

于是自然想到到createEvent initEvent dispatchEvent 这些方法了。

// 创建一个事件对象,就好像你绑定事件回调函数里获得的那个事件对象一样var myEvent = document.createEvent('Event')
// 初始化这个事件对象,为它提高需要的“特性”myEvent.initEvent('myEventName', true, true)
// 按照常见的方式绑定对该事件的监听,这里的 element 可以是任何一个元素,你懂的element.addEventListener('myEventName', function(evt) {
 // 这里,evt 就是你创建的事件对象了,不过它会更丰富一些——这些是浏览器为你做的})// 然后这样触发它element.dispatchEvent(myEvent)

直接上代码:(试了下不兼容 <= IE8 )

<!DOCTYPE html><html lang="zh-cmn-Hans"><head>
 <meta charset="utf-8" />
 <title>原生javascript防jquery的trigger触发鼠标事件</title>
 <meta name="author" content="" />
 <style>
 .p{height:40px;width:100px;background:#ccc;}
 </style></head><body>
 <h2>我是H2</h2>
 <p class="p">点击p</p></body></html><script>

 var h2 = document.querySelector("h2"); var p = document.querySelector(".p");

 h2.onclick = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 }

 h2.ondbclick = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 }

 h2.onmouseenter = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 }

 h2.onmouseleave = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 }

 h2.onfocus = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 }

 h2.onblur = function(event){
 var ev = event || window.event;
 console.log(ev.type);
 } //触发事件方法
 function trigger(elem, event){

 var myEvent = document.createEvent('Event') // 初始化这个事件对象,为它提高需要的“特性”
 myEvent.initEvent(event, true, true); //执行事件
 elem.dispatchEvent(myEvent);
 }

 p.onclick = function(){

 trigger(h2, "click"); //触发click事件

 trigger(h2, "dbclick"); //触发dbclick事件

 trigger(h2, "mouseenter"); //触发mouseenter事件

 trigger(h2, "mouseleave"); //触发mouseleave事件

 trigger(h2, "blur"); //触发blur事件

 trigger(h2, "focus"); //触发focus事件

 }</script>

结果如下:

这里写图片描述

(试了下不兼容 <= IE8 ),大神有更好的兼容方法,望多多指点,可以留言分享。

热心网友 时间:2022-05-15 09:08

不难,只需要设置一个预定义的变量为假,点击一次判断到位假就操作假的动作,然后更改为真,下一次又判断一下!哈哈,其实你的问题我在我的博客里面有分享很多免费视频教程,各大老师的教程都有,欢迎来下载!我也是通过别人的分享学会的,希望可以把这份坚持传递下去,让更多人看到!hulianwang点ren(把点换成.)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mofile里面的视频能下载吗?怎么下? 谁有现在能用的MOFILE网站视频下载方法? MOFILE等视频网站的视频文件怎么下载啊,谢谢大家 mofile如何下载共享文件 怎么使用MOFILE下载视频? ...猪脚在主神空间第一个任务是生化,然后去梦魇空间做卧底,自己有一个... 赣商纵横长三角 想买个金的戒指送给妈妈,价格在2000以内,过年前买好还是年后买好? ...买什么牌子的好,价钱在1500左右,款式简单就好 怀孕晚期能不能吃鹅肉 Jquery 的 trigger()问题 angularjs怎么trigger事件 能不能控制jquery 的trigger事件同步执行 js 怎么实现select选中触发事件? 求jquery的trigger()方法原理 jquery中trigger有什么用 每天做20个俯卧撑要多久才有肌肉 做俯卧撑多久能练出肌肉? 俯卧撑每天多少个可以练出胸肌 每天做多少个俯卧撑,持续做多长时间,能练出肌肉? 我每天做十组俯卧撑,每组10,多久可以练出肌肉? 每天晚上三十个标准俯卧撑,请问多久可以练出肌肉啊,最多能练出个什么... 技嘉z170xud主板 多块硬盘共存? 微博去掉手机型号一定要开通会员嘛 在哪里能下载到前世情迷这部电影 电影前世情迷在哪里能找到 老公惹怒了老婆微信上发过去一个呵呵笑的表情是哄老婆的意思吗? 我今天发现老公的微信有一条信息还有两个表情,那一条信息说你的保养的手机好了,过来拿老公回答等一下就 用一个手机号码注册了两个,旧的被新申请的微信替换了。请问怎么找回旧的? 电脑WIFI怎么连? 关于jquery中trigger()的问题,望高手帮忙! 杏仁草是什么科? 婆婆丁,金银花,桑白皮杏仁干草,麦东,惊芥薄荷治什么病? jquery trigger()方法没参数是表达什么 杏仁的花草有什么功效 中国北方长得最粗的树?北方长得最高的树? 杏仁是什么植物的种子 求基友情侣网名和头像 qq昵称有哪些 为什么资生堂旗舰店没有百优面霜 投资项目评价时使用得指标有哪些? led显示屏的厂家 四年级小学生寒假日记100字,请5分钟后回复我,谢谢 华为和苹果之争的两千字议论文? 我买到跌停的股票了,怎么办啊,不懂就是瞎买的 以一个北大高材生在华为的遭遇为作文? 男性须知哪些男科常识? 有哪些男性应该知道的男科常识? 男性健康知识有哪些??? 关于男科精子检测你们了解多少?