javascript事件 from PPK yahoo演讲
转载自:http://www.zipeng.info/archives/ppk-on-js-events.html
今天我会说一些关于JavaScript事件的事情,我很希望自己能启发大家一些什么,不过大伙都是高手,不管怎么,我还是要说说
JavaScript事件。
大约一年前我打算对JavaScript的事件做一些深入的研究,并且我做了一张兼容性的表,大家可以通过下面这里来
访问
http://quirksmode.org/dom/events
那
么今天我会和大家谈论4件事情:
首先
会是key事件(按键事件),因为在这里存在很多的困惑,很多是关于他们如何工作的困惑。
然
后
我会谈谈change事件,他是我很喜欢的一个事件,不幸的是,它的工作情况有些乱。
第三
,我会谈谈委派focus事
件,当然可能你已经知道了。委派的事件通常只会触发在鼠标或者是键盘事件上,但是我找到了一种办法使它也能够使用在focus上面。
最后
我
会说说手机上面的事件,相当诡异的东西。。。
那么首先就来看看键盘事件吧,键盘事件有三个:keydown,keypress和keyup。大多数
的人都认为自己很清楚他们在会何时触发,而我在这里要告诉你,其实未必就如你所想的那样。
我们先来看看定义,、
keydown事件:当用
户按下键盘上面的一个键时会触发,用户一直按着这个键他就会持续触发。
keypress事件:有一点点的不同,用户按着一个字符键(原文是
character
key)才触发,就是说用户按了一个能在屏幕上输出字符的按键keypress事件才会触发,比如我们往一个textarea里面输入字符。
keyup
事件:很简单,当我们释放一个按键时候会触发。
举一个例子,这样你能更明白些
比方说我按下了一个字母“o”键或是字母“i”键,那么
keydown和keypress就都会触发,而当我按下的是一个特殊的按键比如是shift键,那么kyedown会触发,而keypress不会。
keydown
和keypress的这种区别最初是由微软提出的,所有的ie都支持这种区分方式,一年前(08年吧)推出的safari3.1也适用这样的方式,不过这
只是说明了keydown和keypress存在方式的不同。相比较,firefox和opera会同时触发多个事件,因为此时事件既是一个
keydown事件又是一个keypress事件,所以我们应该会同时触发多个事件。这样很好,但是这样却无法解释为什么要同时存在两种事件、而不是一种
(keydown)。所以其实我还是很喜欢微软的这种区分的。
好吧,我们再来重温一次概念,keydown会在任何键按下时触
发,keypress只是在字符键按下时触发,以上是在ie和s
相关文档:
一、主页面(采用jsp实现)
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<%@page import="org.accp.jwebplayer.biz.MusicBiz"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<h ......
这个效果应该不算什么稀奇,网上也有现成的代码,我这个也没什么特别的地方,只是因为我自己写的,也算是为学习DOM后一个练习;在IE下测试通过;
实现效果是这样的:
读取XML文档;
采用递归生成无限级的树形菜单;
能够响应鼠标事件,展开与拆叠子级菜单;
首先是生成一个XML文档,我用的是XML Spy的编辑器;
< ......
常用:javascript字符串函数 收藏
concat
将两个或多个字符的文本组合起来,返回一个新的字符串。
var a = "hello";
var b = ",world";
var c = a.concat(b);
alert(c);
//c = "hello,world"
indexOf
返回字符串中一个子串第一处出现的索引(从左到右搜索)。如果没有匹配项,返回 -1 。
var index1 = a.indexOf ......
事件源对象
event.srcElement.tagName
event.srcElement.type
捕获释放
event.srcElement.setCapture();
event.srcElement.releaseCapture();
事件按键
event.keyCode
event.shiftKey
event.altKey
event.ctrlKey
事件返回值
event.returnValue
鼠标位置
event.x
event.y
窗体 ......
检索:
1 用||来填充默认值
var status = flight.status || "unknown";
2 使用&&防止TypeError
flight.equipment.model //throw "TypeError"
flight.equipment && flight.equipment.model //undefined
引用
var a={},b={},c={};
document.writeln(a===b); //false
原型
Javascript ......