javascript下给元素添加事件的方法与代码


Posted in Javascript onAugust 13, 2007

最简单的是这样:

<input type="button" onclick="alert(this.value)" value="我是 button" />
动态添加onclick事件:

<input type="button" value="我是 button" id="bu">
<script type="text/javascript">
var bObj=document.getElementById("bu");
bObj.onclick= objclick;
function objclick(){alert(this.value)};
</script>
如果使用匿名函数 function(){},则如下面所示:

<input type="button" value="我是 button" id="bu">
<script type="text/javascript">
var bObj=document.getElementById("bu");
bObj.onclick=function(){alert(this.value)};
</script>

上面的方法其实原理都一样,都是定义 onclick 属性的值。值得注意的是,如果多次定义 obj.onclick,例如:obj.onclick=method1; obj.onclick=method2; obj.onclick=method3,那么只有最后一次的定义obj.onclick=method3才生效,前两次的定义都给最后一次的覆盖掉了。

再看 IE 中的 attachEvent:

<input type="button" value="我是拉登" id="bu">
<script type="text/javascript">
var bObj = document.getElementById("bu");
bObj.attachEvent("onclick",method1);
bObj.attachEvent("onclick",method2);
bObj.attachEvent("onclick",method3);
function method1(){alert("第一个alert")}
function method2(){alert("第二个alert")}
function method3(){alert("第三个alert")}
</script>
执行顺序是 method3 > method2 > method1 ,先进后出,与堆栈中的变量相似。需要注意的是attachEvent 中第一个参数是on开头的,可以是 onclick/onmouseover/onfocus 等等

据说(未经确认验证)在 IE 中使用 attachEvent 后最好再使用 detachEvent 来释放内存

再看看 Firefox 中的的 addEventListener:

<input type="button" value="我是布什" id="bu">
<script type="text/javascript">
var bObj = document.getElementById("bu");
bObj.addEventListener("click",method1,false);
bObj.addEventListener("click",method2,false);
bObj.addEventListener("click",method3,false);
function method1(){alert("第一个alert")}
function method2(){alert("第二个alert")}
function method3(){alert("第三个alert")}
</script>
可以看到,在 ff 中的执行顺序是 method1 > method2 > method3 , 刚好与 IE 相反,先进先出。需要注意的是 addEventListener 有三个参数,第一个是不带“on”的事件名称,如 click/mouseover/focus等。

Javascript 相关文章推荐
JavaScript 撑出页面文字换行
Jun 15 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
jQuery中:only-child选择器用法实例
Jan 03 Javascript
JS面向对象编程详解
Mar 06 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
Mar 08 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
Jun 23 Javascript
详解vue 2.6 中 slot 的新用法
Jul 09 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 Javascript
Vuejs中的watch实例详解(监听者)
Jan 05 Javascript
详解vue 中 scoped 样式作用域的规则
Sep 14 Javascript
javascript引用对象的方法代码
Aug 13 #Javascript
使一个函数作为另外一个函数的参数来运行的javascript代码
Aug 13 #Javascript
一段效率很高的for循环语句使用方法
Aug 13 #Javascript
javascript实现轮显新闻标题链接
Aug 13 #Javascript
document.open() 与 document.write()的区别
Aug 13 #Javascript
js小技巧--自动隐藏红叉叉
Aug 13 #Javascript
javascript据option的value值快速设定初始的selected选项
Aug 13 #Javascript
You might like
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
javascript 对象的定义方法
2007/01/10 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python 实现链表实例代码
2017/04/07 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Django后台admin的使用详解
2019/07/08 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
体育比赛口号
2014/06/09 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
2014年计生工作总结
2014/11/21 职场文书
学校捐书活动总结
2015/05/08 职场文书
排球赛新闻稿
2015/07/17 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
MySQL分区表实现按月份归类
2021/11/01 MySQL
python编程实现清理微信重复缓存文件
2021/11/01 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle