zoukankan      html  css  js  c++  java
  • JS CustomEvent自定义事件传参

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

    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('拜会鑫大佬'));

    结果如下:

    传参也是一样:

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

    结果如下:

     三、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);
            return evt;
        };
    
        CustomEvent.prototype = window.Event.prototype;
    
        window.CustomEvent = CustomEvent;
    })();

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

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

  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/chao202426/p/13632327.html
Copyright © 2011-2022 走看看