『壹』 javascript中的e是什么意思
上面这段代码,在 JavaScript 的事件处理中比较常见,主要是为了兼容老版本的 Internet Explorer(主要是 IE9 之前的版本)而设立的,原因是老版 IE 不支持标准的 W3C 事件处理规范。
这段代码中的 e代表事件(event)对象,即所谓的事件驱动源。下面以鼠标点击事件为例,作一个测试:
(HTML)
<!DOCTYPEhtml>
<html>
<body>
<buttontype="button"id="btn">Click</button>
<scripttype="text/javascript">
//JavaScript代码
</script>
</body>
</html>
(JavaScript)
js">document.getElementById("btn").onclick=function(e){
alert(e);
}
编写一个匿名函数 function(e){ alert(e); },并将其赋值给事件句柄(即 onclick),这是一个回调函数,相当于 onclick(e){ alert(e); }。这段代码在 Chrome、Firefox 或新版 IE(IE9 及以后的版本)等支持标准的浏览器下运行,弹出的应该是类似“[object MouseEvent]”的字符串,说明 e 为事件对象;而在老版 IE 下运行,结果就是“undefined”(未定义)。
显而易见,在标准的流程中,事件对象默认由事件句柄函数的第一个参数传入,供处理函数使用;在老版 IE 中,这个事件对象却无法直接由句柄函数传入,反而可以使用一个全局变量来代表事件对象,这个变量即 window.event。同样,可以用例子验证:
document.getElementById("btn").onclick=function(e){
alert(window.event);
}
在老版 IE 中即可显示 window.event 为对象,说明可以通过这种方式取得事件对象。(其实除了 IE 外,Chrome 等浏览器中也存在window.event,但是在支持标准的浏览器中,我们最好使用标准方式。)
现在,就可以理解为什么会出现 e=e||window.event 这种写法了。因为只有这样才能兼容老版 IE 的事件处理过程:如果浏览器支持标准的处理过程则使用句柄函数传入的第一个参数(e),反之则使用 IE 的处理方法(window.event)。从某种意义上说,标准的事件对象(e) 和老版 IE中的 window.event 可以视为等价的(事实上有一些区别,这里就不详细区分了),两者任何一个有效都可以供我们使用。
document.getElementById("btn").onclick=function(e){
e=e||window.event;
//使用e对象
}
于是,上面的这段代码就可以兼容几乎所有的浏览器了。
『贰』 js图片点击事件
<script type="text/javascript">
function change() {
document.getElementById("img").src = "../../Styles/icons/help2.png";
}
</script>
<img id="img" onclick="change();" src="../../Styles/icons/help.png"/>
//img 本身有一个点击事件 不需要服务器控件,用js就能实现了!
『叁』 javascript,鼠标事件问题!是高手进
要知道,鼠标移动事件是瞬时的,只要鼠标动一动,这个事件就会触发。所以鼠标在Dom上移动一次,会触发很多次鼠标移动事件。这意味着,所谓鼠标停止事件,就夹在两次鼠标移动事件的中间。何为停止?鼠标不动是停止,但鼠标不动是一个持续性的操作,怎么监听事件?
你要监听的是鼠标停止移动事件,也就是说想要监听鼠标在移动一段时间后不再移动这个事件。虽然没有原生的事件支持,但可以通过模拟来实现这个功能。但是在模拟这个功能之前,你必须得明确,你打算怎么定义鼠标停止事件,前面说了,鼠标随便动一动就是很多个鼠标移动事件。那最后一次鼠标移动,距离下一次鼠标移动,间隔多久,你会认为应该触发鼠标停止移动事件呢?
模拟的思路就是,每次鼠标移动,都将这个事件触发的时间点记录下来,当经过一段时间,如果没有触发鼠标移动,就触发鼠标停止移动事件。但显然,这个事件会比较延迟。
下面假定两次鼠标移动间隔超过50毫秒则为停止移动,模拟代码如下:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""
<html>
<head>
<title>NewDocument</title>
<metaname="Generator"content="EditPlus">
<metaname="Author"content="">
<metaname="Keywords"content="">
<metaname="Description"content="">
</head>
<body>
<divid="tar"style="width:300px;height:300px;background:#ddd"></div>
<scripttype="text/javascript">
//鼠标两次移动间隔超过50毫秒为停止移动事件触发
varTIMEOUT_OF_STOP_MOVE=50;
window.onload=function(){
vartar=document.getElementById('tar');
//给div绑定鼠标移动事件
tar.onmousemove=function(){
//获取系统时间,亦为目标最新鼠标移动事件触发时间
varnow=newDate();
//this.lastMove==null
//表示鼠标移动开始
//now-this.lastMove<TIMEOUT_OF_STOP_MOVE
//表示距离上次触发鼠标移动事件不超过TIMEOUT_OF_STOP_MOVE毫秒
if(this.lastMove==null||(now-this.lastMove<TIMEOUT_OF_STOP_MOVE)){
//更新最后移动时间
this.lastMove=now;
//终止鼠标停止事件处理
clearTimeout(this.timer);
//重新绑定鼠标停止事件处理
this.timer=setTimeout(function(){
alert('鼠标停止移动了!');
//鼠标停止移动事件处理
//...
//鼠标停止移动事件的处理代码就写在这里
//...
//清除最后移动时间
this.lastMove=null;
},TIMEOUT_OF_STOP_MOVE);
}
}
}
</script>
</body>
</html>
『肆』 用js怎么写一个回车键盘事件
<script type="text/javascript" language=JavaScript charset="UTF-8">
document.onkeydown=function(event){
var e = event || window.event || arguments.callee.caller.arguments[0];
if(e && e.keyCode==27){ // 按 Esc
//要做的事情
}
if(e && e.keyCode==113){ // 按 F2
//要做的事情
}
if(e && e.keyCode==13){ // enter 键
//要做的事情
}
};
</script>
Js键盘事件
keydown:按键按下
keyup:按键抬起
keypress:按键按下抬起
<body>
<input id="name" type="text" onkeydown="myKeyDown(this.id)" onkeyup="myKeyUp(this.id)">
</body>
<script>
/*输出输入的字符*/
function myKeyDown(id) {
console.log(document.getElementById(id).value);
}
/*按键结束,字体转换为大写*/
function myKeyUp(id) {
var text = document.getElementById(id).value;
document.getElementById(id).value = text.toUpperCase();
}
</script>
常用的键盘事件对应的键码:
keyCode 8 = BackSpace BackSpace
keyCode 9 = Tab Tab
keyCode 12 = Clear
keyCode 13 = Enter
keyCode 16 = Shift_L
keyCode 17 = Control_L
keyCode 18 = Alt_L
keyCode 19 = Pause
keyCode 20 = Caps_Lock
keyCode 27 = Escape Escape
『伍』 js给某个text标签添加鼠标的双击事件
js 的单双击事件同时存在会有一个问题:双击事件会同时触发单击事件,两个事件存在冲突。
我们加一个延迟时间就能很好的解决这个问题。
原理: 当接收到第一个点击时,我们先把单击事件存储在这个是全局变量 click_store 里,如果 0.3 秒内没有接收到双击事件,就去执行它,如果接收到了,我们把它清理掉,然后去执行双击事件。setTimeout() 可以实现延迟执行。