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/

  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/chao202426/p/13632327.html
Copyright © 2011-2022 走看看