事件

Web前端开发QQ群 110939958-业余程序员

关于js的键盘事件

以前总结过各个浏览器中键盘事件的触发情况,可以看出keydown, keyup是比较靠谱的

因为它们是系统提供的比较底层的事件,对应的是键码keyCode标识了哪个键被按下(并不知道输入的是哪个字符)

keypress事件能够给出输入的可打印字符,但是这个事件在各个浏览器和操作系统中存在着很多不兼容性
在火狐中,在keypress中event.charCode保存了键入字符的ASCLL码,而其它的浏览器可以使用keyCode,
要想获得这个字符可以使用String.fromCharCode()

阻止默认行为

用户的键入是可以用js来阻止的,相关代码对应为IE的 returnValue=false;和标准浏览器的preventDefault();
实际中遇到的情况:
除了Opera,在keydown的时候阻止时就可以取消键入的事件
而Opera中需要在keypress的时候阻止。

自定义事件之双击按键

遇到这样的需求,双击按键的事件
还是直接上代码吧:

//首先准备好常规的事件绑定函数
function addEvent(element, name, callback) {
	//标准浏览器
	if(element.addEventListener) element.addEventListener(name, callback, false);
	//IE
	else element.attachEvent("on" + name, callback);
}
//双击按键绑定函数
function addDblPressEvent(element, callback) {
	var presstime = 2;//次数为2
	addEvent(element, "keyup", press);
	//每次单击触发
	function press(e) {
		presstime--;
		setTimeout(reset, 300);
		if(presstime === 0) fire(e);
	}
	//恢复计数器
	function reset() {
		presstime++;
	}
	//触发双击
	function fire(e) {
		callback.call(element, e);
	}
}

//试一下
window.onload = function() {
	addDblPressEvent(document, function(e) {
		console.log("double clicked");
	});
}