复制代码 代码如下: function doSomething(e) { if (!e) var e = window.event; alert(e.type); }
2、哪一个HTML元素是event的目标呢? W3C/Netscape说:target。不对,微软说,是srcElement。这两个属性都返回event发生时的HTML元素。 复制代码 代码如下: function doSomething(e) { var targ; if (!e) var e = window.event; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; }
3、哪些键在event发生时被按下了? 这个问题相对简单一些。首先从keyCode属性得到该键的代码(a=65)。当你得到了键值以后,你可以通过String.fromCharCode()方法知道实际的键值,如果必要的话。 复制代码 代码如下: function doSomething(e) { var code; if (!e) var e = window.event; if (e.keyCode) code = e.keyCode; else if (e.which) code = e.which; var character = String.fromCharCode(code); alert("Character was " + character); }
右击 幸运的是,通常你想知道右键是否被点击。因为W3C和微软恰好在这个问题上给button的定义值是2,所以你依然可以检测右击。 复制代码 代码如下: function doSomething(e) { var rightclick; if (!e) var e = window.event; if (e.which) rightclick = (e.which == 3); else if (e.button) rightclick = (e.button == 2); alert("Rightclick: " + rightclick); // true or false }
需要注意的是,Macs通常只有一个键,Mozilla给Ctrl-Click的button的值定义为2,所以Ctrl-Click也会打开菜单。ICab 还不支持鼠标button属性,所以你在Opera里面还不能检测右击。 5、在Event发生时鼠标的位置在哪? 鼠标位置这个问题相当的严峻。虽然有不少于6对鼠标坐标的属性,但是仍然没有一个可靠的跨浏览器的方法能找到鼠标的坐标。 下面是这6组坐标: 1、clientX,clientY 2、layerX,layerY 3、offsetX,offsetY 4、pageX,pageY 5、screenX,screenY 6、x,y 我曾经在这里解释过pageX/Y和clientX/Y的问题。 screenX和screenY是唯一一对跨浏览器兼容的属性。他们给出鼠标在整个电脑屏幕上的坐标。不幸的是,仅仅这个信息是远远不够的:你永远也不需要知道鼠标在屏幕的位置--好吧,或者你想在当前的鼠标位置放置一个新的窗口。 其他的三对属性也不重要,看这里的描述。 正确的代码 下面的代码能够正确的检测鼠标的坐标 复制代码 代码如下: function doSomething(e) { var posx = 0; var posy = 0; if (!e) var e = window.event; if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else if (e.clientX || e.clientY) { posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } // posx and posy contain the mouse position relative to the document // Do something with this information }