当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JScript|Event]面向事件驱动的编程(二)--实例讲解:将span模拟成超连接

Javascript
兼容firefox的文本框只能输入两位小数的数字的代码
javascript 年月日联动实现核心代码
JavaScript 图片预览效果 推荐
JavaScript是否可实现多线程 深入理解JavaScript定时机制
jquery 表单取值常用代码
javaScript 删除确认实现方法小结
javascript强制弹出新窗口实现代码
Js倒计时代码,当鼠标离开页面与回到页面会自动停止与开始
Div+Js实现的带阴影菜单 微软以前网站曾用过
纯CSS实现的当鼠标移上图片添加阴影效果代码
JavaScript 未知高度元素垂直居中实现代码
javascript 仿开心网好友印象功能(点击文字弹出印象框)
JS+CSS实现的一种交互体验 表单页面
js 效率组装字符串 StringBuffer
window.js 主要包含了页面的一些操作
关于Aptana Studio生成自动备份文件的解决办法
javascript下arguments,caller,callee,call,apply示例及理解
HTA版JSMin(省略修饰语若干)基于javascript语言编写
CSS+Jquery实现页面圆角框方法大全
js 页面刷新location.reload和location.replace的区别小结

Javascript 中的 JScript|Event]面向事件驱动的编程(二)--实例讲解:将span模拟成超连接


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 140 ::
收藏到网摘: n/a

作者:泣红亭
在上一篇文章《面向事件驱动的编程》中我讲了三种将事件绑定到元素的方法,而推荐使用第三种方法,即使用attachEvent/addEventListener来绑定.上一篇文章的主旨是告诉大家如何使用事件,而这一篇文章的主旨是让大家弄懂如何灵活应用事件来批处理某一类的对象行为.
首先讲一讲事件传递的概念.什么是事件传递?举个现实的例子,有个人捏了一下你的手指,你可能会说他捏了你手指,也可能会说他捏了你的手,甚至可能会说他捏了你.事实上三种说法都没错,在浏览器事件的执行中亦有相似的情况,请看下边的例子:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

上边的例子给Input[type=button]、td、tr、tbody、table、body、html、document、window都设置了onclick事件处理函数,都是显示当前对象的id值,点击之后IE会依次出现ButtonElement、TDElement、TRElement、TBODYElement、bodyObject、HTMLElement、documentObj,而Firefox则有一点不同,它显示完documentObj之后还会显示windowObj,而IE却不会,这是因为IE的window对象没有onclick事件。从这里可以看出这些对象都受到了点击,执行了onclick事件函数,而且顺序是从事件来源对象一直往上传直到window对象,这就是浏览器的事件传递。
如何对一类元素的事件进行处理,这是本文的重点,而重点知识又在于事件的传递。从上边的例子可以看出,不管是哪里的对象引发了一个事件,最后都会往上传递,我们要做的是在事件的必经之路上处理它,建议使用window.document。再看一个例子:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

上边的例子给window.document绑定了一个点击事件处理函数Links_Onclick,在里边我获取了事件来源对象,并且显示它的innerHTML值,可以看出不管在IE还是在Firefox,点击无忧脚本论坛1的时候会显示"无忧脚本论坛1",点击无忧脚本论坛2的时候会无忧脚本论坛2,这下明白为什么我要大费周章讲事件传递了吧?我们正是要利用这一点,实现文章标题所说的:将span元素模拟成连接元素。
分析一下连接元素的一般特点:
1、有下划线
2、鼠标移动上去会变成手型鼠标
3、点击之后会进入某一个页面(href属性)
4、可以设置目标窗口的名称(target属性)
接下来一步一步实现上边所举的特点,首先是下划线和鼠标移动上去会变成手型鼠标,这个很简单,用CSS即可,可以与脚本无关,请看示例:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

接下来是实现“点击之后会进入某一个页面”,可以给span元素增加一个属性href保存url,同时处理它的onclick事件,这就要用到刚才我说了半天的事件传递,思路是给window.document对象绑定一个onclick处理函数,如果事件来源对象的标签名(tagName)是span,它的class属性值为link,并且它拥有一个非空href属性,就调用window.open打开href属性所保存的url。
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

点击上边示例代码所模拟出来的“连接”之后,浏览器会连接到无忧脚本论坛(http://www.51js.com),第三个特点也实现了。在这里特别说明一下:Firefox不支持直接使用src.href获取我们自定义的href属性,因此使用了IE和Firefox都支持的getAttribute(attributeName)方法,如果不存在则返回null。
最后的工作是增加target属性实现设置目标窗口的功能,要注意一点就是target属性是可有可无的,实现方法很简单,利用上边的实例就可以轻松实现,就是在window.open那里做一点点手脚,请看示例代码:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

搞定!我们已经初步将拥有特定属性的span元素模拟成了超连接元素,当然这里边还大有文章可做,但这并不是重点,而且将span元素模拟成超连接并没有什么实用价值,毕竟已经有那么好用的A元素可以供我们使用,所以要弄明白一点:搞清楚事件的传递,并且利用它为我们做一些本来很麻烦的工作,这才是本文的重点。
好了,又要告一段落了,下一篇文章的主题还没定,估计是再来一个实例或者另开一个主题,敬请期待。
欢迎有兴趣的同志支持一下无忧脚本论坛的原创行动,一起将您的原创文章贴出来与网友分享,还记得一篇文章里说过这样的话:那些曾经帮助我们的人们,他们没有想过要得到回报,如果硬要说有,那也是希望你能够像他们那样帮助需要帮助的人。