对象事件

  • 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 事件类型--我要坚持到底!的更多相关文章

  1. JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!

    区分大小写 单引号双引号 大多数开发人员选择用单引号,因为XTHML要求所有XHTML的属性都必须使用双引号 var html='<h2 class="a">A lis ...

  2. JavaScript DOM 高级程序设计读书笔记二

    响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...

  3. JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!

    一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...

  4. JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!

    作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...

  5. JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!

    有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...

  6. JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!

    由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...

  7. JavaScript DOM 高级程序设计读书笔记一

    创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...

  8. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!

    把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...

  9. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!

    W3C DOM2样式规范 现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU CSSStyleSheet对象属性: type :始终是 ...

随机推荐

  1. 把div固定在网页顶部

    很多网站都有把某一块固定在顶部的功能,今天上网搜搜然后自己又写了一遍,贴出来给大家看看,哪天用到的时候自己也可以随时看看 <!DOCTYPE html PUBLIC "-//W3C// ...

  2. php,javscript调用百地图度API实现标记

    最近一个项目需要用到地图的定位和标记功能,本来考虑使用google map API .但是在国内这个速度确实很慢,有时候加载到一半就出现错了,不过可以通过google agent 来解决在国内的访问速 ...

  3. Opencv 的数据结构

    opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...

  4. python中文件的复制

    python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...

  5. javaweb 在netbeans 上的部署问题

    最近用netbeans去部署开发 javaweb程序!现总结一下自己的安装开发过程. 第一,在官网上下载netbeans时,有自带的tomcat,可以直接使用这个服务器,在我这儿这个自带的tomcat ...

  6. JavaScript 权威指南第6版 - [阅读笔记]

    JavaScript 基础   Page 13 (1)<script> 的属性:async,charset,defer='defer',language已废,src,type   (2)n ...

  7. phpstorm运行在浏览器中执行php文件报502错误

    原因是之前mac自带的php5.5版本被我升级到了5.6 通过phpinfo()查看到目前php5.6的安装目录 重新制定一些interpreter的路径 /usr/local/php5/bin 就可 ...

  8. MVC-HtmlHelper扩展

    1.添加对System.Web.Mvc的引用 2.添加一个静态类,里面的扩展方法也必须是静态的 //HtmlHelper扩展类 //添加对System.Web.Mvc的引用 //命名空间:System ...

  9. csu 1303 Decimal (数论题)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 1303: Decimal Time Limit: 1 Sec  Memory Limit: ...

  10. 使用Yeoman搭建 AngularJS 应用 (12) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/local-storage.html 安装Bower程序包 我们使用另一个Angular模块,"angular-local-sto ...