JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!
对象事件
- load和unload(载入页面的时候调用load,关闭页面的时候调用unload)
- abort和error
对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明:
ADS.addEvent(window,'load',function(){
//创建一个图像元素
var image=document.createElement('IMG');
//当图像载入后将其添加到文档主体
ADS.addEvent(image,'load',function(){
document.body.appendChild(image);
});
//如果载入时出错,则添加相应信息
ADS.addEvent(image,'error',function(){
var message=document.createTextNode('The image failed to load');
document.body.appendChild(message);
});
//设置图像的src属性以便浏览器取得图像
//可以在这边随便添加任何图片的url
image.setAttribute('src','http://advanceddomscripting.com/images/working.jpg');
//除了下面的这幅图像不存在而且会发生载入错误外,与上面都相同
var imageMissing=document.createElement('img');
ADS.addEvent(imageMissing,'load',function(){
document.body.appendChild(imageMissing);
});
ADS.addEvent(imageMissing,'error',function(){
var message=document.createTextNode('imageMissing failed to load');
document.body.appendChild(message);
});
//可以在这边随便添加任何图片的url
imageMissing.setAttribute('src','http://advanceddomscripting.com/images/missing.jpg');
});
- resize事件(窗口大小调整时该事件被调用)
- scroll事件(适用于具有overflow:auto样式的元素,当元素滚动期间被连续调用。)
鼠标移动事件
- 鼠标移动时候连续调用mousemove
- 移动到新对象mouseover
- 移出新对象mouseout

ADS.addEvent(window,'load',function(W3CEvent){
//一个用于将事件类型和对象
//记录到日志窗口中的方法
function logit(W3CEvent)
{
switch(this.nodetype)
{
case ADS.node.DOCUMENT_NODE:
ADS.log.write(W3CEvent.typp+' on document');
break;
case ADS.node.ELEMENT_NODE:
ADS.log.write(W3CEvent.type+' on box');
break;
}
}
ADS.addEvent(document,'mousemove',logit);
ADS.addEvent(document,'mouseover',logit);
ADS.addEvent(document,'mouseout',logit);
var box=document.getElementById('box')
ADS.addEvent(box,'mousemove',logit);
ADS.addEvent(box,'mouseover',logit);
ADS.addEvent(box,'mouseout',logit);
});
鼠标单击事件
- 当按下时,mousedown
- 抬起时mouseup
- 只有鼠标不动的时候才会发生click
- 双击dblclick
ADS.addEvent(window,'load',function(W3CEvent){
//一个用于将事件类型和对象
//记录到日志窗口中的方法
function logit(W3CEvent)
{
switch(this.nodetype)
{
case ADS.node.DOCUMENT_NODE:
ADS.log.write(W3CEvent.typp+' on document');
break;
case ADS.node.ELEMENT_NODE:
ADS.log.write(W3CEvent.type+' on box');
break;
}
}
ADS.addEvent(document,'mousedown',logit);
ADS.addEvent(document,'mouseup',logit);
ADS.addEvent(document,'dblclick',logit);
var box=document.getElementById('box')
ADS.addEvent(box,'mousedown',logit);
ADS.addEvent(box,'mouseup',logit);
ADS.addEvent(box,'click',logit);
ADS.addEvent(box,'dblclick',logit);
});
键盘事件
- keydown某个键盘被按下时调用。
- keyup事件相应的键被释放时调用。
- keypress事件紧随keyup事件之后。
表单相关事件
- submit和reset事件
这里有个js代码,验证加拿大邮政编码的,很简单,所以仅仅看看代码。
function isPostalCode(s)
{
return s.toUpperCase().match(/[A-Z][0-9]\s*[0-9][A-Z][0-9]/i);
}
ADS.addEvent(window,'load',function(){
ADS.addEvent(
document.getElementById('canadianAddress'),
'submit',
function(W3CEvent){
var postalCode=document.getElementById('postalCode').value;
//使用正则表达式来检查格式是否有效
if (!isPostalCode(posalCode))
{
alert('That\'s not a valid Canadian postal code!'); //提交表单
ADS.preventDefault(W3CEvent);
}
}
);
});
- blur和focus事件
focus事件会在用户单机一个元素或者通过按Tab键遣换到一个元素时候被调用,而单机元素之外其他地方护着Tab键离开元素,则会在原先调用focus事件元素上调用blur事件
下面是为了邮政编码字段添加blur和focus侦听器的载入事件侦听器
ADS.addEvent(window,'load',function(){
//添加初始样式
var postalCode=document.getElementById('postalCode');
postalCode.className='inputMissing';
//当获取焦点屎将类修改为编辑
ADS.addEvent(postalCode,'focus',function(W3CEvent){
//通过修改类来表示用户正在编辑这个字段
this.className='inputEditing';
});
//当失去焦点时候对信息进行验证,并根据输入的值是否有效重新修改样式
ADS.addEvent(postalCode,'blur',function(W3CEvent))
{
if (this.value=='')
{
//修改类以表示缺少内容
this.className='inputMissing';
}else if (!isPostalCode(this.value))
{
//修改类以表示内容无效
this.className='inputInvalid';
}else
{
//修改样式以表示内容完成
this.className='inputComplete';
}
}
});

- change事件
适用于<input>,<select>,<textarea>表单元素,该事件会在focus事件发生后,当用户在focus和blur之间进行修改元素的值时被调用。
//验证表单的同时,还能自动生成表单其他字段的内容
ADS.addEvent(window,'load',function(){
var postalCode=ADS.$('postalCode'); ADS.addEvent(postalCode,'change',function(W3CEvent){
var newPostalCode=this.value
if (!isPostalCode(newPostalCode))
{
return;
}
var reg=new XMLhttpRequest();
req.open('POST','server.js?postalCode='+newPostalCode,true);
req.onreadystatechange=function(){
if (req.readyState==4)
{
eval(req.responsetText);
if (ADS.$('street').value=='')
{
ADS.$('street').value=street;
}
if (ADS.$('city').value=='')
{
ADS.$('city').value=city;
}
if (ADS.$('province').value=='')
{
ADS.$('province').value=province;
}
}
}
req.send();
});
});
JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!的更多相关文章
- JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!
区分大小写 单引号双引号 大多数开发人员选择用单引号,因为XTHML要求所有XHTML的属性都必须使用双引号 var html='<h2 class="a">A lis ...
- JavaScript DOM 高级程序设计读书笔记二
响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!
作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...
- JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!
有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...
- JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!
由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...
- JavaScript DOM 高级程序设计读书笔记一
创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...
- JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!
把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...
- JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!
W3C DOM2样式规范 现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU CSSStyleSheet对象属性: type :始终是 ...
随机推荐
- BootStrap中Affix控件的使用方法及如何保持布局的美观
Affix是BootStrap中的一个很有用的控件,他能够监视浏览器的滚动条的位置并让你的导航始终都在页面的可视区域.一开始的时候,导航在页面中是普通的流式布局,占有文档中固定的位置,当页面滚动的时候 ...
- DTCMS插件配置;给所有会员发信息
插件配置 :http://www.dtcms.net/help/10.aspx 给所有人发信息 a) 将收件人设置为0即发送给所有人 b) Templates\main\userme ...
- hadoop 文件 复制 移动 FileUtil.copy
FileSystem fs = FileSystem.get(conf); Path pattern = new Path(resultViewPath + "phone*"); ...
- css中overflow:hidden的属性 可能会导致js下拉菜单无法显示
css中overflow:hidden属性导致ExtJS中无法显示下拉滚动条 overflow属性: visible 默认.内容不会被修剪,会呈现在元素之外. hidden 内容会被修剪,但是浏览器不 ...
- Teradata基础教程中的数据库试验环境脚本
Teradata基础教程中的数据库表: Customer: 客户信息表 Location: 位置信息表 Employee: 雇员信息表 Job: 工作信息表 Department: 部门表 ...
- Python拷贝及多进程与类的问题
最近写python写的尤其不顺利,更多的debug,逐渐的深入,产出却比较少.应该是个瓶颈期,坚持坚持,厚着脸皮也要坚持下去. 0x00 拷贝问题 程序中涉及到多进程和协程,大致的模型是开了2+个进程 ...
- TWaver初学实战——如何在TWaver属性表中添加日历控件?
在日期输入框中添加日历控件,是一种非常流行和实用的做法.临渊羡鱼不如退而写代码,今天就看看在TWaver中是如何实现的. 资源准备 TWaver的在线使用文档中,就有TWaver Proper ...
- 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR)
1 HDR基本概念 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR),是一种表达超过了显示器所能表现的亮度范围的图像映射技术,已成为目前游戏应用不可或缺的 ...
- centos apache 隐藏和伪装 版本信息
1.隐藏Apache版本信息 测试默认 apache 的状态信息[root@1314it conf]# curl -Is localhostHTTP/1.1 200 OKDate: Tue, 16 N ...
- Matlab中rand('state',sum(clock))解析
一.问题来源 来自于一份PSO代码,PSO中需要初始化粒子位置和速度. 二.问题探究 众所周知,Matlab中的rand()函数产生的是伪随机数,但一般用来也可以接受.但是,如果我们知道伪随机数的初始 ...