JavaScript高级程序设计51.pdf
(续上篇)
模拟鼠标事件
var btn=document.getElementById("myBtn");
//创建事件对象
var event=document.createEvent("MouseEvents");
//初始化事件对象
event.initMouseEvent("click",true,true,document.defaultView,0,0,0,0,0,false,false,false,false,0,null);
//触发事件
btn.dispatchEvent(event);
模拟键盘事件
“DOM2级事件”草案中本来包含了键盘事件,在定稿之前又删除了,Firefox根据草案实现了键盘事件;“DOM3级事件”与删除的“DOM2级事件”有很大不同
DOM3级规定,调用createEvent()并传入“KeyboardEvent”创建一个键盘事件,返回的对象包含initKeyEvent()方法,接收下列参数
type(字符串)要触发的事件类型,“keydown”
bubbles(布尔值)是否可以冒泡
cancelable(布尔值)是否可以取消
view(AbstractView)与事件关联的视图,几乎总是设置为document.defaultView
key(布尔值)按下的键的键码
location(整数)表示按下了哪里的键,0表示默认主键盘,1表示左,2表示右,3表示数字键盘,4表示移动设备的键盘(虚拟键盘),5表示手柄
modifiers(字符串)空格分隔的修改键列表,如“shift”
repeat(整数)在一行中按了这个键多少次
DOM3级不提倡使用keypress事件,只能利用这种技术来模拟keydown和keyup事件
var textbox=document.getElementById("myTextbox"),
event;
//DOM3级事件
if(document.implementation.hasFeature("KeyboardEvent","3.0")){
event=document.createEvent("KeyboardEvent");
//初始化对象
event.initKeyboardEvent("keydown",true,true,document.defaultView,"a",0,"shift",0);
}
//触发事件
textbox.dispatchEvent(event);
以上的例子是模拟按住shift的同时按下A键
在Firefox中,调用createEvent()并传入“KeyEvents”就可以创建一个键盘事件,返回的对象包含一个initKeyEvent()方法,接收10个参数
type(字符串)要触发的事件类型,“keydown”
bubbles(布尔值)是否可以冒泡
cancelable(布尔值)是否可以取消
view(AbstractView)与事件关联的视图,几乎总是设置为document.defaultView
ctrlKey(布尔值)是否按下了Ctrl键,默认为false
altKey(布尔值)是否按下了Alt键,默认为false
shiftKey(布尔值)是否按下了Shift键,默认为false
metaKey(布尔值)是否按下了Meta键,默认为false
keyCode(整数)被按下或释放的键的键码,这个参数对keydown和keyup事件有用,默认为0
charCode(整数)通过按键生成的字符的ASCII编码,这个参数对keypress事件有用,默认为0
//只适用于Firefox
var textbox=document.getElementById("myTextbox");
//创建事件对象
var event=document.createEvent("KeyEvents");
//初始化事件对象
event.initKeyEvent("keypress",true,true,document.defaultView,false,false,false,false,65,65);
//触发事件
textbox.dispatchEvent(event);
在其他浏览器中,则需要创建一个通用的事件,然后再向事件对象中添加键盘事件特有的信息
var textbox=document.getElementById("myTextbox");
//创建事件对象
var event=document.createEvent("Events");
//初始化事件对象
event.initEvent(type,bubbles,cancelable);
event.view=document.defaultView;
event.altKey=false;
event.ctrlKey=false;
event.shiftKey=false;
event.metaKey=false;
event.keyCode=65;
event.charCode=65;
//触发事件
textbox.dispatchEvent(event);
在此必须使用通用事件,而不能使用UI事件,因为UI事件不允许向event对象添加新的属性
这样的模拟事件虽然会触发键盘事件,但却不会向文本框中写入文本,这是由于无法精确模拟键盘事件造成的
模拟其他事件
模拟变动事件createEvent("MutationEvents"),包含initMutationEvent()方法的变动事件对象,接收type、bubbles、cancelable、relatedNode、preValue、newValue、attrName和attrChange
模拟HTML事件(如“focus”),createEvent("HTMLEvents"),initEvent()初始化
浏览器很少使用变动事件和HTML事件,因为它们会受到一些限制
自定义DOM事件
自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件createEvent("CustomEvent"),返回的对象有一个initCustomEvent()方法,接收4个参数
type(字符串)触发的事件类型
bubbles(布尔值)事件是否可以冒泡
cancelable(布尔值)事件是否可以取消
detail(对象)任意值,保存在event对象的detail属性中
var div=document.getElementById("myDiv"),
event;
EventUtil.addHandler(div,"myevent",function(event){
alert("DIV:"+event.detail);
});
EventUtil.addHandler(document,"myevent",function(event){
alert("DOCUMENT:"+event.detail);
});
if(document.implementation.hasFeature("CustomEvents","3.0")){
event=document.createEvent("CustomEvent");
event.initCustomEvent("myevent",true,false,"Hello world!");
div.dispatchEvent(event);
}
支持自定义事件的浏览器有IE9+和Firefox6+
IE中的模拟事件
IE8之前的版本模拟事件与DOM中的思路相似:创建event对象,指定相应信息,触发事件
var btn=document.getElementById("myBtn");
//创建事件对象(不接受参数)
var event=document.createEventObject();
//添加必要信息
event.screenX=100;
event.screenY=0;
event.clientX=0;
event.clientY=0;
event.ctrlKey=false;
event.altKey=false;
event.shiftKey=false;
event.button=0;
//触发事件(接收事件处理程序的名称和event对象2个参数),fireEvent()方法会自动为event对象添加srcElement和type属性
textbox.fireEvent("onkeypress",event);
与通用事件一样,这个例子触发了事件处理程序却不会在文本框中看到任何字符
-----------------------------------13章事件结束-----------------------------------
JavaScript高级程序设计51.pdf的更多相关文章
- JavaScript高级程序设计61.pdf
JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...
- JavaScript高级程序设计60.pdf
错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...
- JavaScript高级程序设计58.pdf
15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...
- JavaScript高级程序设计57.pdf
表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...
- JavaScript高级程序设计55.pdf
输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...
- JavaScript高级程序设计54.pdf
过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...
- JavaScript高级程序设计53.pdf
共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...
- JavaScript高级程序设计52.pdf
表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...
- JavaScript高级程序设计50.pdf
hashchange事件 HTML5新增了hashchange事件,以便在URL的参数列表(及URL中“#”号后面的所有字符串)发生变化时通知开发人员,之所以新增这个事件,是因为在Ajax应用中,开发 ...
随机推荐
- v4l2简介
V4L是linux内核中关于视频设备的子系统,为linux下的视频驱动提供了统一的接口,使应用程序可以使用统一的API操作不同的视频设备,简化视频系统的开发与维护 V4L2相比与V4L有更好的扩展性和 ...
- 如何在Ubuntu上创建及管理LXC容器?
将LXC安装到Ubuntu上 $ sudo apt-get install lxc 安装完毕之后,运行lxc-checkconifg工具,检查当前Linux内核支持LXC的情况.要是一切都已被启用,内 ...
- javascript 写职责链
我认为职责链最大的目的在于解决对一个对象的加工过程问题.并且如何通过filter在什么时机截止操作流程 /** * by JackChen 2016-3-14 15.16.53 * 职责链 * 看马士 ...
- C# WPF 从网络加载图片到byte[]数组中 Stream转byte[]代码
折腾一中午 因为NetworkStream不支持Length属性 private byte[] GetImageFromResponse(WebResponse response) { using ( ...
- ubuntu杂记
安装ssh: sudo apt-get install openssh-server sudo /etc/init.d/ssh start 将主机中vmware8的网络改为自动获取ip,就可以ping ...
- 【转载】db blocks gets & consistent gets
LOGIC IO(逻辑读次数)= db block gets + consistent gets consistent get : 在一致读模式下所读的快数,包括从回滚段读的快数. db block ...
- 从IT的角度思考BIM(二):模式与框架
我们满怀着美好期许,鼓起勇气敲响了 BIM 世界的大门.忽然人群中有人高呼:BIM 已死,大家都散了吧! 这时人群开始骚动起来.“我早就说这玩意是忽悠人的吧,你们不信还偏要来”,“我花了好多钱准备这次 ...
- C++引用之声明方法
引用就是某一变量的一个别名,对引用的操作就是对目标的操作. 引用的声明方法: 类型标识符 &引用名=目标变量名: 如: int a; int &ra=a; //定义引用ra,他是变量a ...
- Linux技术修复
今天在慕课网上学习了Linux的一些知识: 我使用命令: ***:~$ route add default gw 192.168.1.1 添加了一个网关:192.168.1.1之后的结果为: ***: ...
- BZOJ 1692: [Usaco2007 Dec]队列变换
Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的"全美农场主大奖赛".在这场比赛中,每个参赛者都必须让他的奶牛排成一列 ...