JavaScript Event学习第三章 早期的事件处理程序 |
本文标签:Event,事件处理 这些古老的浏览器只支持一种注册事件处理程序的方法,这个方法是Netscape发明的 。因为Netscape先发制人,所以如果微软也想做支持JavaScript事件的浏览器就得跟着Netscape走,所以这里没有兼容性的问题 。所以这种模式在任何支持JavaScript的浏览器都能运行---除了Mac上的IE3,他根本就不支持事件 。 复制代码 代码如下: <A HREF="somewhere.html" onClick="return doSomething()"> function doSomething() { return confirm(Do you really want to follow this link?) } 这就是(非常简单的)用户交互 。用户会被问一个问题,如果回答是肯定的那么函数返回true,如果取消了那么久返回一个false 。这个返回值会被事件处理程序捕获,然后转给事件本身 。如果是flase那么默认动作就不会被执行--链接不会进入 。 然而,不是所有的默认动作都能被阻止 。比如unload事件就不行 。假设用户关闭浏览器窗口--触发了unload事件 。如果你能阻止关闭窗口,那么窗口会违背用户的意愿而一直打开着么?当然不会 。 你可以试试微软的beforeunload属性来阻止unload 。与其制造一个非常混乱的情况让用户来选择确认这个行为 。那不如不用 。 返回false来阻止默认动作是所有浏览器都支持的这是事件处理程序的基本组成 。如今的事件处理程序模型还添加了一些新的方法来阻止默认动作: W3C给事件添加了preventDefalut()方法 。如果你引用了这个方法那么默认动作就会被阻止 。 微软给事件添加了returnValue属性 。如果你设置他的值为false那么默认动作也会被阻止 。 但是用不着这些个,简单的返回false就够了 。 window.status 这里对于返回false有一个例外 。当你设置鼠标经过链接的时候改变窗口的状态栏以后,你还想阻止默认动作--在状态栏显示链接地址--的时候,你就应该返回true: 复制代码 代码如下: <A HREF="somewhere.html" onMouseOver="window.status = This link goes somewhere; return true"> 如果你不这样做,那么代码就不会工作 。没人知道那是怎么回事,就是一个比较怪异的事情 。 this 在JavaScript里this关键字通常指函数的所有者 。如果this指向事件发生的HTML元素,那么一切都是那么的美好,你可以很简单的做很多事情 。 不幸的是,虽然this非常的强大,但是如果你不是明确的知道他怎么运作的话使用起来还是比较难的 。关于这个我在另一个地方有详细的讨论,在这我在内联模式下做一些概述 。 在内联模式下你可以将this作为一个事件处理程序函数的一个参数 。所以你可以: 复制代码 代码如下: <A HREF="somewhere.html" onClick="doSomething(this)"> function doSomething(obj) { // obj now refers to the link } 你给函数传递了一个引用,存储在obj里面 。现在你不需要在遍历文档寻找是哪个元素被点击了:他很安全的存储在变量obj里面 。现在你就可以: 复制代码 代码如下: <A HREF="somewhere.html" onClick="return doSomething(this)"> <A HREF="somewhereElse.html" onClick="return doSomething(this)"> function doSomething(obj) { var linkTo = obj.href; return confirm(Do you really want to follow the link to + linkTo + ?) } 函数接受到一个链接的引用存储在obj里面 。现在你可以读取这个链接的链接地址然后进行确认 。你可以把这个技巧运用在任何一个链接上:他总是会显示你刚才点击的那个链接的真实地址 。 继续 如果需要继续学习,请看下一章 。 |