JavaScript 事件的一些重要说明


Posted in Javascript onOctober 25, 2009

1,JavaScript异步回调

<script language="javascript"> 
//注册回调函数loaded到处理函数window.onload上 
window.onload = loaded; 
//把方法window.alert地址传递给show函数 
var show = window.alert; 
function loaded(){ 
show("success"); 
} 
</script>

2,事件对象

下面的js实现当在textarea文本框里面键入回车时,并不导致换行。即禁用回车键

<textarea ></textarea> 
<script language = "javascript"> 
/* 
事件的对象的棘手部分在于,IE的实现与W3C的规范有查表。IE使用一个独立的全局事件对象(它可以再全局变量属性window.event中找到),而其他浏览器则使用独立的包含事件对象的参数传递。 
*/ 
document.getElementsByTagName("textarea")[0].onkeypress = function(e) 
{ 
//如果不存在事件对象,则获取全局的(仅IE)的对象 
var e = e || window.event; 
//如果敲击了回车键,返回false(使它不发生任何行为) 
return e.keyCode != 13; 
} 
</script>

3,this关键字

浏览器会把this关键字等同于引用该函数(含有this关键字的函数)的当前元素

<body> 
<div id = "body"> 
<ul class = "links"> 
<li> 
<a href = "/">Home</a> 
</li> 
<li> 
<a href = "./">mappath</a> 
</li> 
<li> 
<a href = "../">parentpath</a> 
</li> 
</ul> 
</div> 
</body> 
<script language = "javascript"> 
var li = document.getElementsByTagName("li"); 
for (var i = 0; i < li.length; i++) 
{ 
li[i].onclick = handeClick; 
} 
function handeClick() 
{ 
this.style.backgroundColor = "blue"; 
this.style.color = "red"; 
} 
</script>

4,取消事件冒泡

通常当你对子元素作样式作修改,或者触发事件,根据冒泡原理,其父元素也会作相同改变,为防止这类事情发生,需要做取消事件冒泡的处理。

下面实例展示了鼠标会为其悬停的当前元素加上红色的边框。如果不阻止事件冒泡的话,每次把鼠标移到一个元素上时,该元素及其父元素都会有红色的边框,这是我们不希望看到的。

<body> 
<div id = "body"> 
<ul class = "links"> 
<li> 
<a href = "/">Home</a> 
</li> 
<li> 
<a href = "./">mappath</a> 
</li> 
<li> 
<a href = "../">parentpath</a> 
</li> 
</ul> 
</div> 
</body> 
<script language="javascript"> 
//阻止冒泡的通用函数 
function stopBubble(e) 
{ 
if (e && e.stopPropagation) 
//w3c方法 
e.stopPropagation(); 
else 
//ie方法 
window.event.cancelBubble = true; 
} 
var li = document.getElementsByTagName("*"); 
for (var i = 0; i < li.length; i++) 
{ 
//监听用户鼠标,当移动到元素上时,为元素加上红色边框 
li[i].onmouseover = function(e) 
{ 
this.style.border = "1px solid red"; 
stopBubble(e); 
} 
//检查用户鼠标,当移开元素时,删除我们加上的边框 
li[i].onmouseout = function(e) 
{ 
this.style.border = "0px"; 
stopBubble(e); 
} 
} 
</script>

5,重载浏览器的默认行为

浏览器都有这种默认的行为,即当我们在<a>标签上点击的时候会链接到href属性的地址上,有的时候我们并不希望这种事情发生,而想实现我们自己的效果,比如弹出警告框,示例如下。

<a href = "https://3water.com">重载浏览器的默认行为</a> 
<script language = "javascript"> 
/* 
为了达到同<a href = "#" onclick = function(){alert("success");}>content</a>相同效果 
*/ 
function stopDefault(e) 
{ 
//W3C防止浏览器默认行为 
if (e && e.preventDefault) 
e.preventDefault(); 
//IE防止浏览器默认行为 
else 
window.event.returnValue = false; 
return false; 
} 
var a = document.getElementsByTagName("a"); 
for (var i = 0; i < a.length; i++) 
{ 
a[i].onclick = function(e) 
{ 
alert("我已经修改了浏览器的默认行为了"); 
return stopDefault(e); 
//好像直接写下面一句也可以 
//return false; 
} 
} 
</script>

6,事件的亲和力(accessibility,又称可访问性)

为了使得自己的网站更有亲和力,可以这样考虑,当我们把鼠标放在一个元素上或者通过键盘的tab键访问时,其样式应该保持一致,如下代码

<body> 
<div id = "body"> 
<ul class = "links"> 
<li> 
<a href = "/">Home</a> 
</li> 
<li> 
<a href = "./">mappath</a> 
</li> 
<li> 
<a href = "../">parentpath</a> 
</li> 
</ul> 
</div> 
</body> 
<script language="javascript"> 
var a = document.getElementsByTagName("a"); 
for (var i = 0; i < a.length; i++) 
{ 
//绑定鼠标悬停和聚焦事件处理函数到<a>元素上 
//当用户把鼠标悬停到链接上,或者(使用键盘)聚焦到链接上时,它会把<a>的背景颜色变成蓝色 
a[i].onmouseover = a[i].onfocus = function() 
{ 
this.style.backgroundColor = "blue"; 
} 
//绑定鼠标离开和模糊事件处理函数到<a>元素上 
//当用户从链接移开时,它会把<a>的背景颜色变成白色 
a[i].onmouseout = a[i].onblur = function() 
{ 
this.style.backgroundColor = "white"; 
} 
} 
</script>

7,绑定事件监听
//addEventt()添加事件 
//Scott Andrew's original addEvent() function 
//elm元素,document.getElementId('btn1') 
//evType事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on",如Click 
//fn当然就是绑定的函数了,记住不要跟括号,如showalert 
//useCapture布尔值,表示该事件的响应顺序.userCapture若为true,则浏览器采用Capture,若为false则采用bubbing方式.建议用false 
function addEvent(elm, evType, fn, useCapture) 
{ 
if (elm.addEventListener) 
{//firefox,navigation,etc.. 
elm.addEventListener(evType, fn, useCapture); 
} 
else if (elm.attachEvent) 
{//IE 
var r = elm.attachEvent('on' + evType,fn); 
} 
else 
{ 
elm['on' + evType] = fn; 
} 
} 
//removeEvent()注销事件 
//参数名同addEvent()函数 
function removeEvent(elm, evTye, useCapture) 
{ 
if (elm.detachEvent) 
{ 
elm.detachEvent('on' + evType); 
} 
else if (elm.removeEventListener) 
{ 
elm.removeEventListener(evType, userCapture); 
} 
}
Javascript 相关文章推荐
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
Feb 12 Javascript
深入理解jquery跨域请求方法
May 18 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
Jul 28 Javascript
AngularJS教程之环境设置
Aug 16 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
使用webpack-dev-server处理跨域请求的方法
Apr 18 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
详解Vue依赖收集引发的问题
Apr 22 Javascript
javascript写的一个链表实现代码
Oct 25 #Javascript
JavaScript的变量作用域深入理解
Oct 25 #Javascript
理解JavaScript变量作用域更轻松
Oct 25 #Javascript
理解 JavaScript 预解析
Oct 25 #Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 #Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
Oct 25 #Javascript
javascript window对象属性整理
Oct 24 #Javascript
You might like
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
Python中类的继承代码实例
2014/10/28 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
大学生校园创业计划书
2014/02/08 职场文书
土地转让协议书
2014/09/27 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
培训简讯范文
2015/07/20 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android