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


相关推荐

  • django drf jwt_jwt工作原理

    django drf jwt_jwt工作原理前言带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗?什么是JWT?为什么要用JWT?它有什么优势?JWT的认证流程是怎样的?JWT的工作原理?我们

    2022年7月31日
    7
  • awk 字符串替换 gsub

    awk 字符串替换 gsubgsub(r,s)在整个$0中用s替代rgsub(r,s,t)在整个t中用s替代rawk-F”,”‘{str=gsub(/\t*|*$/,””,$3);ret=$1″,”$2″,”$3″,”NR;printret}’去除第三个字段的空格与制表符awk-F”\t”‘{if($3==”吉林”){gsub($3,”吉林省”,$3);pr

    2022年7月15日
    17
  • 问题解决之Cannot find module ‘fs/promises‘

    问题解决之Cannot find module ‘fs/promises‘现象 在 Electron 项目升级了打包工具后打包失败 Cannotfindmo fs promises 原因 经过排查发现 package json 和 package lock json 里打包工具版本不一致解决方法 重新安装指定版本的打包工具来更新 package lock json 对应的版本 npminstallxx xxxxxsave

    2026年3月17日
    2
  • Android工具类整合「建议收藏」

    Android工具类整合「建议收藏」Android-JSONUtil工具类常用的Json工具类,包含Json转换成实体、实体转json字符串、list集合转换成json、数组转换成jsonpublicclassJSONUtil{privatestaticfinalStringTAG=JSONUtil.class.getSimpleName();privateJSONUtil()…

    2022年5月21日
    40
  • 【Consul】CONSUL环境部署

    【Consul】CONSUL环境部署Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件 由 HashiCorp 公司用 Go 语言开发 基于 MozillaPubli 0 的协议进行开源 Consul 支持健康检查 并允许 HTTP 和 DNS 协议调用 API 存储键值对

    2026年3月19日
    17
  • apache 80端口被占用_tomcat8005端口被占用

    apache 80端口被占用_tomcat8005端口被占用参考:https://jingyan.baidu.com/article/1876c8527b1fc3890b13763b.html1.win+R,输入cmd,打开命令行窗口2.命令行输入netstat-ano3.找到80端口及对应进程 4.在任务管理器中的进程处查看与上述80端口对应的PID相同的进程,并关闭。如果没有PID,选择“查看”–>"选择列"–…

    2025年6月20日
    5

发表回复

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

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