项目过程中会使用到用户触发了一个事件,需要对另外一个元素同样进行触发相应的事件然后执行相应的代码,jquery中就可以通过trigger实现
trigger api
今天想了一下,如果没有jq,那用js是怎么实现的呢?最近第二次看《javascript高级程序设计》这边书又有了一些收获。
如果是实现触发click事件,第一印象肯定是直接element.click(); 就可以了,那触发dbclick、mouseleave、focus 、mouseenter等事件是不是也可以直接element.mouseleave()呢?
于是执行了一下发现,报错了!没错并不是简单的加个element.eventType()这样就可以直接触发相应的事件了。
立即学习“Java免费学习笔记(深入)”;
于是自然想到到createEvent initEvent dispatchEvent 这些方法了。
- // 创建一个事件对象,就好像你绑定事件回调函数里获得的那个事件对象一样var myEvent = document.createEvent('Event')// 初始化这个事件对象,为它提高需要的“特性”myEvent.initEvent('myEventName', true, true)// 按照常见的方式绑定对该事件的监听,这里的 element 可以是任何一个元素,你懂的element.addEventListener('myEventName', function(evt) { // 这里,evt 就是你创建的事件对象了,不过它会更丰富一些——这些是浏览器为你做的})// 然后这样触发它element.dispatchEvent(myEvent)
登录后复制
直接上代码:(试了下不兼容
- nbsp;html>
原生javascript防jquery的trigger触发鼠标事件 .p{height:40px;width:100px;background:#ccc;}我是H2
点击p
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事件 }
登录后复制
结果如下:
(试了下不兼容
以上就是javascript仿jquery的trigger触发鼠标事件实例分享的详细内容,更多请关注【创想鸟】其它相关文章!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。