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)
上一篇 2025年5月26日 下午4:22
下一篇 2025年5月26日 下午5:01


相关推荐

  • ISO-8859-1乱码恢复

    ISO-8859-1乱码恢复

    2022年1月22日
    71
  • pycharm断点属性设置介绍

    pycharm断点属性设置介绍主要内容 断点属性设置 生成红色断点后 鼠标悬停至红点 右键 1 enable 勾选表示该断点可以执行 2 suspend allthread 阻塞所有或至阻塞断点当前线程 3 condition 满足条件才断言 这里当满足 a 2 注意若写成 a 2 则无法判断

    2025年12月3日
    6
  • 插入USB麦克风电脑没有声音了的解决方法

    插入USB麦克风电脑没有声音了的解决方法插入 USB 麦克风电脑没有声音了的解决方法

    2026年3月19日
    2
  • java 项目日志管理设计方案[通俗易懂]

    java 项目日志管理设计方案[通俗易懂]java项目日志管理设计方案因项目需要记录整个系统的操作记录,考虑到系统操作日志的数据量,单表很容易达到瓶颈,导致查询效率低下,顾使用分表方案,减小数据库的负担,缩短查询时间。目前对于分表的解决方案有很多,但本篇博文主要讲解博主自行实现的日志管理的解决方案1创建日志表1.1日志表Sql语句如下具体表设计随项目情况而变化表创建SQL语句CREATETABLE`sys_user

    2022年5月20日
    36
  • linux ntp校时 日志,Linux NTP校时

    linux ntp校时 日志,Linux NTP校时1 安装客户端 root 权限运行 apt getinstallnt 修改配置文件 etc default ntpdate NTPSERVERS ntp fudan edu cn 完成以上操作 即可在下次开机时 自动校时如果不想等到下次开机 则直接用 root 用户 直接运行 ntpdatentp fudan edu cn 即可校时成功

    2026年3月20日
    2
  • id门禁卡复制到手机_怎么把手机变成门禁卡 手机NFC复制门禁卡图文教程

    id门禁卡复制到手机_怎么把手机变成门禁卡 手机NFC复制门禁卡图文教程无论是在学校、小区或者是单位里面,一般都会有一道安全的门禁,保证范围内部的安全。但是每次都需要找到专用的门禁卡开门,经常容易忘记或者不小心弄丢了。今天,小编教大家一个技巧,教你如何把门禁卡悄无声息的放在手机上,这样以后就可以用手机当门禁卡了,这样是不是方便很多呢?下面是详细的方法步骤。通过修改手机NFCID过门禁大概流程就是利用手机上的APP(推荐:NFCTagInfo)读取出门禁卡的ID,然…

    2022年6月10日
    341

发表回复

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

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