triggerEvent_研究儿童通用的方法

triggerEvent_研究儿童通用的方法假设有一个id为testA的a元素,然后有以下代码(jquery已存在):$(document).ready(function(){ $(‘#testA’).on(‘testEvent’,function(e,data1,data2,data3){ console.log(e,data1,data2,data3); }); varba=documen…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

假设有一个id为testA的a元素,然后有以下代码(jquery已存在):

$(document).ready(function(){
		
	$('#testA').on('testEvent', function(e,data1,data2,data3){
		console.log(e,data1,data2,data3);
	});
	
	var ba = document.getElementById('testA');
	ba.addEventListener('testEvent', function(e){
		console.log(e);
	});

});

Jetbrains全家桶1年46,售后保障稳定

即,用两种方法监听一个自定义事件:testEvent,再看看如何触发testEvent事件:

document.addEventListener('click', function(e){
	$('#testA').trigger('testEvent', [2,3,4]);
});

实际上只有用on监听的才能起作用,就是说用jquery的方法trigger来发事件,就只能用jquery的方法on[或者其他.click(handler)之类的]来监听事件,而用js原生的addEventListener方法是不行的。

为解决上面的问题,我们可以这样:

var evt = new Event('testEvent');
var ba = document.getElementById('testA');
ba.dispatchEvent(evt);

如果要带上自定义数据,可以这样:

var evt = new CustomEvent('testEvent',{detail:[2,3,4],a:1,b:3});
var ba = document.getElementById('testA');
ba.dispatchEvent(evt);

然后在事件处理函数中,可以通过event.detail来访问需要的数据,但event对象里面没有a,b属性,此处不清楚内部原因,是不是只有一个detail属性可用也不得而知。更多的说明可以看这里:https://developer.mozilla.org/en-US/docs/Web/API/Document/createEvent

 

上面的方法在firefox,chrome上可行,但IE8及以下版本浏览器不可行,下面来处理IE的问题。

IE8发事件函数用的是fireEvent,创建事件对象用的是document.createEventObject(),看下面的代码:

var evt = document.createEventObject();
evt.x = 100;
evt.y = 200;
evt.button = 1;
evt.z = 34;
ba.fireEvent('onclick', evt);

注意,我把testEvent换成了onclick,因为IE8不支持自定义事件。

接下来实现通用的发事件方法,如果要兼容IE8,那么就不能发送自定义事件:

function triggerEvent(element,eventType){
	var e;
	if(element.dispatchEvent){//正常情况
		e = new Event(eventType);
		element.dispatchEvent(e);
	}else if(element.fireEvent){//IE
		e = document.createEventObject();
		e.button = 1;
		element.fireEvent('on'+eventType,e);
	}else if(element['on'+eventType]){
		element['on'+eventType].call();
	}
}

上面的方法,如果在IE8及以下版本中运行是无法发送自定义事件的。如果允许用jquery的trigger方法,还是用jquery比较方便。

 

转载于:https://www.cnblogs.com/ywxgod/p/4467814.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234785.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ansi,UTF8,Unicode,ASCII编码的差别

    Ansi,UTF8,Unicode,ASCII编码的差别

    2021年11月15日
    48
  • ASPCMS 错误号:-2147467259 解决办法

    ASPCMS 错误号:-2147467259 解决办法运行网站的时候,居然提示:提示:【】错误号:-2147467259错误描述:未指定的错误其实说白了,出现这种情况,就是权限问题,解决方法如下:A、打开系统目录下的windows/temp属性;(注意:这里是temp文件夹的属性)B、切换到安全标签,在安全标签里面的所有用户组,你都赋予完全控制权限就OK了;如果没有出现安全选项标签的话,请根据以下方法让安全标签出现:1、打开“我的电脑”→工具菜单→文件夹选项→取消“使用简单文件夹共享”前面的打钩√…

    2022年7月13日
    53
  • Django 安装_docker安装redis

    Django 安装_docker安装redis安装redis1.使用Homebrew安装Redisbrewinstallredis执行上述命令后出现以下内容,则成功安装Downloadfailed:https://mirrors.

    2022年7月29日
    10
  • 【第二篇】Spring-Session实现Session共享Redis集群方式配置教程

    循序渐进,由易到难,这样才更有乐趣!概述本篇开始继续上一篇的内容基础上进行,本篇主要介绍Spring-Session实现配置使用Redis集群,会有两种配置方式,一种是Redis-Cluster,一种是Redis-Sentinel,并通过一个简单的demo进行实例演示!对Redis-Cluster和Redis-Sentinel不太懂,或者不知道在Windows下面如何搭建的…

    2022年2月27日
    44
  • 图片连续循环滚动代码(向上、下、左、右)

    图片连续循环滚动代码(向上、下、左、右)向上:向下:向左:向右:

    2022年7月1日
    22
  • Hybrid开发框架一、Weex

    Hybrid开发框架一、Weex前言最近开始试水Weex开发,使用这么长一段时间,感觉写Weex还是非常方便的。作为一个Android开发,免不了要追查一下weex的sdk源码。今天,就以WeexSDKforAndroid为例,分析SDK的认识WeexSDK源码https://github.com/alibaba/weex/tree/dev/android整体分析下拉,按照js文件的渲染过程,绘制出了下面…

    2022年9月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号