JS CustomEvent自定义事件传参

摘要:
首先,看了鑫大佬的文章后,百度了文章内容的两个方法:1、CustomEvent事件是有程序创建的,可以有任意自定义功能的事件2、dispatchEvent()方法给节点分派一个合成事件这两个方法之前也见过,不过并没有去了解,这次刚好又看到,就简单了解一下。

首先,看了鑫大佬的文章后,百度了文章内容的两个方法:

1、CustomEvent事件是有程序创建的,可以有任意自定义功能的事件

2、dispatchEvent()方法给节点分派一个合成事件

这两个方法之前也见过,不过并没有去了解,这次刚好又看到,就简单了解一下。好了,直接进入正文

一、addEventListener事件触发

例子,假设DOM对象变量名称是input,给输入框元素绑定了一个'input'事件:

input.addEventListener('input', function() {
    //content
});

此时,点击下拉框希望触发输入框元素的"input"事件,就可以使用dispatchEvent方法和CustomEvent对象

input.dispatchEvent(new CustomEvent('input'));

如果希望触发"input"事件的同事传递下拉列表对应的参数对象给"input"事件,则可以使用CustomEvent.detail

var myEvent = new CustomEvent('input', {
    //objParams就是需要传递的参数,
    //可以是任意的类型
detail: objParams
});
input.dispatchEvent(myEvent);

二、支持任意的自定义事件名称

不仅是浏览器原生的事件,如"click","mousedown","change","mouseover","mouseenter"等可以触发,任意的自定义名称的事件也是可以触发的

document.body.addEventListener('拜会鑫大佬', () => { console.log('文明、公正、法治、诚信'); });
//触发
document.body.dispatchEvent(new CustomEvent('拜会鑫大佬'));

结果如下:

JS CustomEvent自定义事件传参第1张

传参也是一样:

document.body.addEventListener('show', (event) =>{ console.log(event.detail); });
//触发
let myEvent = new CustomEvent('show', {
    detail: {
        username: 'zhangxinxu.com',
        userid: '20200820'}
});
document.body.dispatchEvent(myEvent);

结果如下:

JS CustomEvent自定义事件传参第2张

三、IE浏览器不支持怎么处理

IE浏览器是不支持CustomEvent.detail的,Edge 14+才开始支持,所以需要增加一段Polyfill脚本就可以了,如下:

/**
 * CustomEvent constructor polyfill for IE
 */(function() {
    if (typeof window.CustomEvent === 'function') {
        //如果不是IE
        return false;
    }

    var CustomEvent = function(event, params) {
        params = params ||{
            bubbles: false,
            cancelable: false,
            detail: undefined
        };
        var evt = document.createEvent('CustomEvent');
        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
        returnevt;
    };

    CustomEvent.prototype =window.Event.prototype;

    window.CustomEvent =CustomEvent;
})();

这段代码复制到页面中,放在具体的业务JavaScript代码的前面,否则可能会因为执行时机先后的问题导致出bug。

本文内容来自鑫大佬的官网:https://www.zhangxinxu.com/wordpress/2020/08/js-customevent-pass-param/

免责声明:文章转载自《JS CustomEvent自定义事件传参》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决clipboard手机端无法复制的一种思路Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

原生js动态创建、获取、删除属性的几种方式

1.创建属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>动态创建属性</title> <style> .democlass{color:blue;} </style> </hea...

js中 转义字符

(1)针对双引号“”的使用: html= "<a href="javascript:void(0)" onclick="getSubContent('" +(choices[next])[0]+ "','" +(choices[next])[1]+ "','" +(choices[next])[2]+ "','" +((choices[next])...

seaJs学习笔记之javascript的依赖问题

之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题。我们将继续就之前javascript中性能问题继续介绍。 先来回顾一下性能问题的解决方法,那就是按需引入js文件。那么这样按需引入会不会存在问题呢?今天我们为大家继续揭晓答案。先看如下页面。 多文件HTML代码 <!doctype...

RK Android7.1 禁用 USB触摸

Android输入系统(6)——多点触摸处理 一. 二.禁用触摸 2.1.frameworks ativeservicesinputflingerEventHub.h EventHub->getEvents(),获取输入事件和设备增删事件 /* * Input device classes. */ enum { /* The input...

js给dropdownlist添加选项

<input name="" type="text" /> <input name="" type="button" value="创建新目录" onclick="newDir()" /> Js代码 <script type="text/javascript"> ////创建新目录 f...

为博客园(或网站)添加百度分享按钮 自定义调用JS代码

1、百度分享代码调用地址 http://share.baidu.com/code 根据提示,一步一步的自定义选择,最后复制自定义好的样式,添加到WEB。 2、在页首Html代码中添加复制过来的JS代码 <!--baidu分享--> <script>window._bd_share_config={"common":{"bdSnsK...