• 自定义事件javascript


     自定义事件

    1、event构造函数自定义事件

    /*
    * 自定义一个名为build的事件
    * bubbles :事件是否冒泡
    * cancelable:是否阻止事件的默认操作
    * composed:指示事件是否将触发影子根外部的侦听器
    */
    var
    buildEvent = new Event('build',{"bubbles":true, "cancelable":false,"composed":false});
    //监听自定义定义的build事件   elem=getElemntById("xx").addEventListener()或者document.addEventListener()
    elem.addEventListener('build', function (e) {
    /* 类似elem.onclick */
    }, false); //手动触发事件,自定义的浏览器是捕获不到的需要用下面的代码手动触发 elem.dispatchEvent(buildEvent);

     2、CustomEvent()自定义事件

    为了向事件对象添加更多数据,存在CustomEvent接口,并且可以使用详细信息属性传递自定义数据。 例如,可以如下创建事件

    var event = new CustomEvent('build', { detail: elem.dataset.time });

    面的代码允许你在事件监听器中访问更多的数据:

    function eventHandler(e) {
      log('The time is: ' + e.detail);
    }

    例子:

    obj=document.querySelector('form')
    
    // 可以监听为定义的事件,我们在后面补上就行
    obj.addEventListener("cat", function(e) { process(e.detail) });
     
    // 创建自定义事件
    var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}});
    //手动触发事件
    obj.dispatchEvent(event);

    模拟鼠标点击事件

      <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>simulate click</title>
    </head>
    <body>
      <input type="button" value="clickMe" id="demo_click">
      <script>
          
          const btn = document.getElementById('demo_click');
          btn.onclick = function () { //
            alert('click complete!');
          };
          simulateClick();
        // 2. 模拟 浏览器的鼠标点击事件
        // 2.1 可以触发 onclick 事件(先触发)
        // 2.2 可以触发 addEventListener 事件(后触发)
        // 2.3 jQuery 的事件绑定底层就是 addEventListener ,
          function simulateClick() { // 模拟 浏览器的鼠标点击事件
            const event = new MouseEvent('click', {
              view: window,
              bubbles: true,
              cancelable: true
            });
            btn.dispatchEvent(event);      
          }
      </script>
    </body>
    </html>

     或者

    var e = document.createEvent("MouseEvents");
    e.initEvent("click", true, true);
    document.getElementById("clickme").dispatchEvent(e); //只要id 就好  
    
    
    或者
    var obj = document.getElementById("obj");
    
    //obj元素上绑定click事件
    obj.addEventListener('click', function (event) {
    alert(event.eventType);
    }, false);
    
    var event1 = document.createEvent('HTMLEvents');
    event1.initEvent("click", true, true);
    event1.eventType = 'message';
    
    //触发obj元素上绑定click事件
    obj.dispatchEvent(event1);

     IE<9为fireEvent方法

    //document上绑定自定义事件ondataavailable
    document.attachEvent('ondataavailable', function (event) {
       alert(event.eventType);
    });
    var obj=document.getElementById("obj");
    
    //obj元素上绑定click事件
    obj.attachEvent('onclick', function (event) {
       alert(event.eventType);
    });
    
    //调用document对象的createEventObject方法得到一个event的对象实例。
    var event = document.createEventObject();
    event.eventType = 'message';
    
    //触发document上绑定的自定义事件ondataavailable
    document.fireEvent('ondataavailable', event);
    
    //触发obj元素上绑定click事件
    document.getElementById("test").onclick = function () {
       obj.fireEvent('onclick', event);
    };

    3、废弃的旧方法

    // Create the event.
    var event = document.createEvent('Event');
    
    // Define that the event name is 'build'.
    event.initEvent('build', true, true);
    
    // Listen for the event.
    elem.addEventListener('build', function (e) {
      // e.target matches elem
    }, false);
    
    // target can be any Element or other EventTarget.
    elem.dispatchEvent(event);
  • 相关阅读:
    TestNG测试用例编写和执行
    Myeclipse+TestNG白盒测试环境搭建
    Jmeter创建一个简单的http接口用例
    python 格式化日期
    测试需求分析总结
    mac终端配色
    浅谈游戏中BUFF的设计要点
    图片头代码
    My.Ioc 代码示例——避免循环依赖
    My.Ioc 代码示例——谈一谈如何实现装饰器模式,兼谈如何扩展 My.Ioc
  • 原文地址:https://www.cnblogs.com/lichihua/p/11691305.html
Copyright © 2020-2023  润新知