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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu下载pycharm并安装_ubuntu卸载pycharm

    ubuntu下载pycharm并安装_ubuntu卸载pycharm1.下载PyCharm安装包1)进入PyCharm官网,选择Professional专业版,直接点击DOWNLOAD,如图1;2)进入跳转页面,出现提示框,点savefile,开始下载;3)下载完成后,安装包在Downloads文件夹下,如图2;2.安装PyCharm1)解压文件。右键安装包,点击“ExtractHere”,如图3,图4;图三:解压图四:解压后2)先整理文件夹,把pycharm-2018.1.4文件夹放在Downloads根目录,方便找到;3)打开终端,进

    2022年8月26日
  • html超级链接生成器,超链接地址生成器

    html超级链接生成器,超链接地址生成器超链接生成器是一款快速方便,简单易用的超链接地址生成器。它可以把以纯文本形式存在的超链接地址转换成真正的超级链接,方便你点击超链接来打开网址,或者打开IE快捷菜单等。软件特点:①界面简介,操作方便,速度快;②可以从浏览器拖放链接到窗口生成URL,或从资源管理器拖放文件到窗口生成URL;③可以批量导入文件路径来生成URL;④可以扫描某个目录下的所有文件生成URL。⑤在IE右键快捷菜单中增加生成超链…

    2022年5月21日
  • kafka集群搭建-docker版本[通俗易懂]

    kafka集群搭建-docker版本[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档kafka集群搭建文章目录kafka集群搭建前言一、kafka是什么?二、集群1.集群2.负载均衡3.扩容4.ZookeeperLeader选举kafka架构集群搭建下载安装zookeeper前言kafka是个高吞吐的消息中间件,为啥快啊?1顺序读写20拷贝3批量提交和批量ACK4分片和副本消息队列高可用就得用集群。提示:以下是本篇文章正文内容,下面案例可供参考一、kafka是什么?kafka理论参

    2022年5月2日
  • 计算机专业英语单词书,计算机专业英语词库.pdf「建议收藏」

    计算机专业英语词库计算机专业英语3000多词关键词:单词计算机专业英语1.filen.文件;v.保存文件2.commandn.命令,指令3.usev.使用,用途4.programn.程序5.linen.(数据,程序)行,线路7.displ…

    2022年4月16日
  • 阿里云SSL证书免费申请方法(图文教程)

    阿里云SSL证书免费申请方法(图文教程)2022阿里云免费SSL证书品牌为DIgicertDV单域名证书,每个阿里云账号可以申请20个免费SSL证书资源包,SSL证书大全图文详解阿里云SSL证书免费申请教程,包括SSL证书申请域名DNS验证等操作:阿里云SSL证书免费申请方法1、打开阿里云SSL证书页面,点击“选购SSL证书”,如下图:阿里云SSL证书申请页面2、SSL证书服务选择“DV单域名证书【免费试用】”,如下图:按照以下选择:商品类型:SSL证书 SSL证书服务:DV单域名证书【免费试用】 数量:20.

    2022年10月4日
  • C# 数组截取

    C# 数组截取这段时间常常需要对数据的数据进行截取,以方便解析。原来一直用的Array.ConstrainedCopy();以及 Array.Copy();来进行数组复制截取 先看Array.ConstrainedCopy():其说明如下 publicstaticvoidConstrainedCopy(ArraysourceArray,intsourceIndex,Arraydes…

    2022年6月8日

发表回复

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

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