js动态添加事件

JavaScript 动态添加事件代码 - JavaScript 技巧 事件委托是一种在父元素上添加事件处理程序来处理其子元素事件的技术。通过使用事件委托,我们可以避免为每个子元素都添加事件处理程序,从而提高性能和代码的简洁性。它允许我们为指定的元素添加多个事件处理程序,并且支持捕获和冒泡阶段的事件。除了将函数作为事件处理程序,我们还可以使用匿名函数来动态添加事件处理程序。但是,在某些情况下,我们可能需要动态地添加事件处理程序,这时就需要使用 JavaScript 来实现。动态添加事件处理程序可以让我们在运行时根据条件或用户操作来动态地决定添加何种事件。 阅读详情
往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几种方法,我们也常常混合使用。

方法一、setAttribute

var obj = document.getElementByIdx_x("obj");
obj.setAttribute("onclick", "javascript:alert('测试');");
这里利用 setAttribute 指定 onclick 属性,简单,很好理解,
但是:IE 不支持,IE 并不是不支持 setAttribute 这个函数,而是不支持用 setAttribute 设置某些属性,包括对象属性、集合属性、事件属性,也就是说用 setAttribute 设置 style、onclick、onmouseover 这些属性在 IE 中是行不通的。
LEO:在IE6下尝试成功

方法二、用 attachEvent 和 addEventListener

IE 支持 attachEvent
obj.attachEvent("onclick", Foo);
function Foo()
{
alert("测试");
}
也可写在一起
obj.attachEvent("onclick", function(){alert("测试");});
其它浏览器支持 addEventListener
obj.addEventListener("click", Foo, false);
function Foo()
{
alert("测试");
}
同样也可写在一起
obj.addEventListener("click", function(){alert("测试");}, false);
注意 attachEvent 的事件带 on,如 onclick,而 addEventListener 不带 on,如 click。
顺便说一下 addEventListener 的第三个参数(虽然很少用)useCapture - 如果为 true,则 useCapture 指示用户希望启动捕获。启动捕获后,所有指定类型的事件将在被指派到树中其下面的任何 EventTargets 之前指派给已注册的 EventListener。正在通过树向上 bubbling 的事件将不触发指定的使用捕获的 EventListener。
综合应用
if (window.attachEvent)
{
//IE 的事件代码
}
else
{
//其它浏览器的事件代码
}

方法三、事件 = 函数

例:obj.onclick = Foo;
这在多个浏览器中均支持,这是属于旧的规范(方法二属于 DOM2 的规范),不过由于使用方便,用的场合也比较多。

下面是我的解决办法:
function show(){
alert("Hello, world!!!");
}
obj.setAttribute('onclick',document.all ? eval_r(function(){show()}) : 'javascript:show()');

以上方法在ie8下会出现错误:
ie8也支持document.all, 但eval_r(function(){show()})却会出错

js用来区别IE与其他浏览器及IE6-8之间的方法。

1、document.all
2、!!window.ActiveXObject; 。!!的作用是把一个其他类型的变量转成的bool类型

使用方法如下:

if (document.all){
  alert(”IE浏览器”);
}else{
alert(”非IE浏览器”);
}

if (!!window.ActiveXObject){
  alert(”IE浏览器”);
}else{
  alert(”非IE浏览器”);
}

下面是区别IE6、IE7、IE8之间的方法:

var isIE=!!window.ActiveXObject;
var isIE6=isIE&&!window.XMLHttpRequest;
var isIE8=isIE&&!!document.documentMode;
var isIE7=isIE&&!isIE6&&!isIE8;
if (isIE){
  if (isIE6){
    alert(”ie6″);
  }else if (isIE8){
    alert(”ie8″);
  }else if (isIE7){
    alert(”ie7″);
  }
}

所以obj.setAttribute('onclick',document.all ? eval_r(function(){show()}) : 'javascript:show()'); 要改为:

一:

obj.setAttribute('onclick',document.all && !document.documentMode ? eval_r(function(){show()}) : 'javascript:show()');

二:

如果不想像上面那样改,也可以将ie8声明为ie7.

在head标签上加上

IE11没有window.attachEvent方法处理方法 IE11没有window.attachEvent方法处理方法,文档中有详细说明 立即下载

相关推荐

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

通过window.attachEvent来监听事件

function initHMenus(){ alert("你触发了onresize事件!"); } //以下语句解释为:当window触发onresize:改变窗口大小和切换窗口时,则调用initHMenus方法。 window.attachEvent("onresize",initHMenus); 也可以:window.attachEvent("onload",initHMenus)

993

DELL SC存储扩容避坑指南:6Gb vs 12Gb扩展柜混插的真相

本文深入解析DELL SC存储扩容中6Gb与12Gb扩展柜混插的核心规则与性能影响。文章指出,从SCOS 7.3版本起允许混插,但整个SAS环路速率将降至最低设备水平,尤其在12Gb控制器上接入6Gb扩展柜会严重拖累性能。指南提供了清晰的兼容性矩阵、实战操作流程及关键避坑清单,帮助管理员安全、高效地完成存储扩容。

weixin_28314575的博客 459

window.onload事件--attachEvent和addEventListener

可能你也碰到过这种情况,就是在js的代码中用了window.onload后,可能会影响到body中的onload事件。你可以全写在body 中,也可以全放到window.onload中,但是这样并不是很方便,有时我们需要两个同时用到。这时就要用window.attachEvent

1162

Keil MDK-ARM v5.43a 部署 STM32F103 开发环境全流程

嵌入式开发环境是 Cortex-M 微控制器工程落地的基础支撑,其核心在于编译器链、设备支持包(DFP)与调试驱动的协同一致性。Keil MDK-ARM 作为工业级 ARM Cortex-M 开发套件,依托 Arm Compiler 和 CMSIS 标准,提供从代码编译、外设抽象到实时调试的全栈能力。其技术价值体现在对 STM32 等主流 MCU 的深度适配、高可靠性 SWD 调试支持,以及与 HAL 库、CubeMX 工程的无缝集成。典型应用场景涵盖温湿度传感终端、工业 PLC 子模块及低功耗边缘节点开发

weixin_33750664的博客 890

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 497

[JavaScript]onclick、addEventListener、attachEvent详解

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取!目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取![外链图片转存中…(img-2JID2FuB-1712270526978)]

2401_84092068的博客 2041

4G+GNSS定位模块DX-CT511N-B:AT指令实战与多协议通信指南

本文详细介绍了4G+GNSS定位模块DX-CT511N-B的AT指令实战应用与多协议通信配置。内容涵盖TCP/UDP通信、MQTT协议集成、HTTP服务交互以及GNSS定位功能的深度解析,为开发者提供从基础指令到高级调试的完整指南,助力物联网设备开发。

hope8的博客 289

window.attachEvent和addEventListener

以前写 JavaScript 脚本时,事件都是采用  object.event = handler;  的方式初始化。这种方式对于 Internet Explorer、Mozilla/Firefox 和 Opera 来说很通用。但是有一个问题就是,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执行多个处理过程就不好用了。  但 是 Internet Explorer

nox 916

百度慧眼人口位置数据:从原理到实战的GIS处理全流程

本文详细解析百度慧眼人口位置数据的处理全流程,从基本原理到实战应用。通过空间网格划分、终端数量统计等技术手段,百度慧眼数据能准确反映人群分布特征。文章涵盖坐标系转换、核密度分析、热力图制作等GIS处理技巧,并分享商业选址、城市规划等典型业务场景的解决方案,帮助读者高效利用这一数据资源。

weixin_30872157的博客 534

lammps 案例in文件汇总

进阶案例: 聚乙烯和石墨烯界面pull out模拟代码 反应力场reax/c设置方法及案例解析 石墨烯热导率模拟代码(NEMD方法) 圆锥形SiC纳米磨削单晶硅源代码 高熵合金FeNiCrCoCu纳米压痕模拟代码 fix indent命令实现纳米摩擦及摩擦力计算 Fe原子辐照轰击多层石墨烯模拟代码 铝基石墨烯复合物压缩变形in文件源代码 石墨烯自动卷曲到Fe纳米线模拟源代码 铝/石墨烯复合物结晶过程lammps模

lammps_jiayou的博客 9446

window.attachEvent 和addEventListener

以前写JavaScript脚本时,事件都采用object.event = handler的方式绑定。这种方式对于Internet Explorer、Mozilla/Firefox和Opera来说很通用。但有一个问题,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执执行多个处理过程,就不好用了。 Internet Explorer从5.0开始,提供了一个attachEven...

ChinaJweb 735

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1699

js动态添加事件的方法

js动态添加事件的方法往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几种方法,我们也常常混合使用。 方法一、setAttributevar obj = document.getElementById("obj");obj.setAttribute("onclick", "javascript:alert(测试);");这里利用 set

我的地盘 7309

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

在 JS 中动态添加事件(整理)

在 JS 中动态添加事件,涉及到浏览器兼容性问题。结合我的实践经验以及从网上收集的一些资料,特整理在此,希望有点用。   方法一、setAttribute var obj = document.getElementById("obj"); obj.setAttribute("onclick", "javascript:alert('测试');"); 这里利用 setAttribute 指

u010227447的专栏 8265

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

原生js javascript 给动态添加的元素绑定事件

原生js 给动态添加的元素绑定事件的可能应用场景:在创建一个元素之后,需要给它绑定事件,这时候要用到事件委托。jQuery现在很少用了,就不说了,现在来说一下原生js的写法: let tag = `<div class="newsBox"> <p class="newsList">Title: <span class="newsUrl" id="newsUr.

一只爱吃糖的小羊 1万+

javascript动态添加事件

http://hi.baidu.com/cmsdn/item/b48e4d133c0a2f4fe65e0655 javascript动态添加事件 1、document.all.对象.ondblclick=function(){方法}; 2、if(window.attachEvent)  window.attachEvent('onresize', function(){方法}); 

618

js动态append添加的节点点击事件无效

js动态append添加的节点点击事件无效问题

DUDUfine的专栏 1万+

JavaScript实现动态添加的元素添加点击事件

在页面开发过程中常常遇到需要动态添加元素,然后给这一元素绑定相关事件的情况,这种情况下一般需要给元素加上相关属性,然后写这些元素的事件函数即可。动态添加的元素怎么绑定事件呢? 原生JavaScript 原生JavaScript主要有2种实现方式,第一种是在动态添加的html代码中添加oclick事件,然后传递一个唯一的参数来判断点击的是哪个,然后做相应的操作。 第二种是通过事件委托的原理进行处理,事件委托将一个 事件监听器实际上绑定到整个容器,然后每个列表项被点击就可以访问,这样效率更高。 具体的.

qq_18932003的博客 1万+

动态添加JS 事件

<br />Javascript为元素动态的添加事件包括两种情况: <br />不带参数的事件和带参数的事件。 <br />一、不带参数的事件: <br />两种方式:直接给对象添加事件,节点添加事件 <br />例如给一个id为tab1的添加onclick事件 <br />第一种情况: <br />var t = document.getElementById("NewTitle"); <br />t.onclick = function showmsg(){ <br />    alert('Hello

开满向日葵的地方 7951

JavaScript动态的为元素添加事件

JavaScript动态的为元素添加事件   目前的的页面布局都是基于XHTML,通过DIV+CSS布局,实现DHTML的样式。所以这个JavaScript动态的为元素添加事件因此而普遍了。下面我说说怎样通过javascript为元素动态的添加事件.Javascript为元素动态的添加事件包括两种情况:不带参数的事件和带参数的事件。一、不带参数的事件:两种方式:直接给对象添加事件,节点

World_Spaces的专栏 650

JS 动态添加事件

转: http://www.iteye.com/problems/22476   Javascript为元素动态的添加事件包括两种情况:    不带参数的事件:  直接给对象添加事件,节点添加事件 : var _obj = document.getElementById("Obj"); _obj.onfocus = functionName; _obj.onblu...

ugibb510的专栏 189

动态html的js事件绑定事件绑定,JS实现为动态添加的元素增加事件功能示例【基于事件委托】,js示例...

JS实现为动态添加的元素增加事件功能示例【基于事件委托】,js示例本文实例讲述了JS实现为动态添加的元素增加事件功能。分享给大家供大家参考,具体如下:我们在日常开发中有时会通过js创建一些元素,但是如果使用原始的for循环给创建的节点添加事件的方法往往行不通:www.jb51.net js动态添加事件123123123添加document.getElementById('btn').addEven...

weixin_39662462的博客 265

JAVASCRIPT动态的为元素添加事件

现在感觉js很好很强大,随着深入的学习,你就会不会拒绝在客户端使用js。之前也在网上找了点资料,一起看看。  value="我是 button" /> 动态添加onclick事件:   var bObj=document.getElementById("bu"); bObj.onclick= objclick; function objclick(){alert(this.value)

CaidChen的专栏 3888

js动态添加html元素绑定事件,JS实现动态添加DOM节点和事件的方法示例

本文实例讲述了JS实现动态添加DOM节点和事件的方法。分享给大家供大家参考,具体如下:运行效果图如下:完整实例代码如下:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">Js(DOM)动态添加节点和事件function addEl(){//找到要添加节点的父节点(table)var tb = document.ge...

weixin_28942523的博客 802
上一篇: 检测浏览器是否支持querySelectorA…
下一篇: javascript的nodeType&nbsp;属性
普通网友
博客等级 码龄16年 90粉丝 1232原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值