首页 | 网页设计 | w3c标准 | flash动画 | 平面设计 | 经典文章 | 特约专题 | 资源下载 | 健康频道 | 重庆品牌网站 | 留言簿 | 
技术文章  资源下载 经典素材  社区论坛
   
 您现在的位置: vi设计在线 >> 经典文章 >> 网页设计 >> 网络编程 >> 正文  
  JScript|Event]面向事件驱动的编程(二)--实例讲解:将span模拟成超连接         
[ 作者:佚名    转贴自:本站原创    点击数:2130    更新时间:2006/3/31    文章录入:帝一网络 ]

减小字体 增大字体

中国重庆vi设计在线推荐:JScript|Event]面向事件驱动的编程(二)--实例讲解:将span模拟成超连接

在上一篇文章《面向事件驱动的编程》中我讲了三种将事件绑定到元素的方法,而推荐使用第三种方法,即使用attachEvent/addEventListener来绑定.上一篇文章的主旨是告诉大家如何使用事件,而这一篇文章的主旨是让大家弄懂如何灵活应用事件来批处理某一类的对象行为.

首先讲一讲事件传递的概念.什么是事件传递?举个现实的例子,有个人捏了一下你的手指,你可能会说他捏了你手指,也可能会说他捏了你的手,甚至可能会说他捏了你.事实上三种说法都没错,在浏览器事件的执行中亦有相似的情况,请看下边的例子:

<html id="HTMLElement" onclick="alert(this.id);">
<head>
<title>测试页面</title>
</head> <body>
<table id="TABLEElement" onclick="alert(this.id);">
<tbody id="TBODYElement" onclick="alert(this.id);">
<tr id="TRElement" onclick="alert(this.id);">
<td id="TDElement" onclick="alert(this.id);"><input type="button" id="ButtonElement" onclick="alert(this.id);" value="按钮" /></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function Object_onclick()
{
alert(this.id);
}
window.id = "windowObj";
window.onclick = Object_onclick;
window.document.id = "documentObject";
window.document.onclick = Object_onclick;
window.document.body.id = "bodyObject";
window.document.body.onclick = Object_onclick;
</script>
</body>
</html>

上边的例子给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。再看一个例子:

<html> <head>
<title>测试页面</title>
</head> <body>
<a href="http://www.51js.com" target="_blank">无忧脚本论坛1</a>
<a href="http://www.51js.com" target="_blank">无忧脚本论坛2</a>
<script type="text/javascript">
function Links_onclick(e)
{
var src = window.document.all != null ? e.srcElement : e.target; //获取事件来源对象
alert(src.innerHTML);
}
if(window.document.all != null)
window.document.attachEvent("onclick", Links_onclick)
else
window.document.addEventListener("click", Links_onclick, false);
</script>
</body>
</html>

上边的例子给window.document绑定了一个点击事件处理函数Links_onclick,在里边我获取了事件来源对象,并且显示它的innerHTML值,可以看出不管在IE还是在Firefox,点击无忧脚本论坛1的时候会显示"无忧脚本论坛1",点击无忧脚本论坛2的时候会无忧脚本论坛2,这下明白为什么我要大费周章讲事件传递了吧?我们正是要利用这一点,实现文章标题所说的:将span元素模拟成连接元素。

分析一下连接元素的一般特点:

1、有下划线
2、鼠标移动上去会变成手型鼠标
3、点击之后会进入某一个页面(href属性)
4、可以设置目标窗口的名称(target属性)

接下来一步一步实现上边所举的特点,首先是下划线和鼠标移动上去会变成手型鼠标,这个很简单,用CSS即可,可以与脚本无关,请看示例:

<html> <head>
<title>测试页面</title>
<style type="text/css">
span.link
{
text-decoration:underline;
color:blue;
cursor: pointer;
}
</style>
</head> <body>
<span class="link">无忧脚本1</span>
<span class="link">无忧脚本2</span>
</body>
</html>


接下来是实现“点击之后会进入某一个页面”,可以给span元素增加一个属性href保存url,同时处理它的onclick事件,这就要用到刚才我说了半天的事件传递,思路是给window.document对象绑定一个onclick处理函数,如果事件来源对象的标签名(tagName)是span,它的class属性值为link,并且它拥有一个非空href属性,就调用window.open打开href属性所保存的url。

<html>
<head>
<title>测试页面</title>
<style type="text/css">
span.link
{
text-decoration:underline;
color:blue;
cursor: pointer;
}
</style>
<script type="text/javascript">
function Document_onclick(e)
{
var src = window.document.all != null ? e.srcElement : e.target;
if(src.tagName != null
&& src.className != null
&& src.getAttribute("href") != null
&& src.tagName.toString().toLowerCase() == "span"
&& src.className.toString().toLowerCase() == "link"
&& src.getAttribute("href").toString().length > 0)
{
window.open(src.getAttribute("href").toString());
}
}
if(window.document.all != null)
window.document.attachEvent("onclick", Document_onclick);
else
window.document.addEventListener("click", Document_onclick, false);
</script>
</head> <body>
<span class="link" href="http://www.51js.com">无忧脚本1</span>
<span class="link" href="http://www.51js.com">无忧脚本2</span>
</body>
</html>

点击上边示例代码所模拟出来的“连接”之后,浏览器会连接到无忧脚本论坛(http://www.51js.com),第三个特点也实现了。在这里特别说明一下:Firefox不支持直接使用src.href获取我们自定义的href属性,因此使用了IE和Firefox都支持的getAttribute(attributeName)方法,如果不存在则返回null。

最后的工作是增加target属性实现设置目标窗口的功能,要注意一点就是target属性是可有可无的,实现方法很简单,利用上边的实例就可以轻松实现,就是在window.open那里做一点点手脚,请看示例代码:

<html>
<head>
<title>测试页面</title>
<style type="text/css">
span.link
{
text-decoration:underline;
color:blue;
cursor: pointer;
}
</style>
<script type="text/javascript">
function Document_onclick(e)
{
var src = window.document.all != null ? e.srcElement : e.target;
if(src.tagName != null
&& src.className != null
&& src.getAttribute("href") != null
&& src.tagName.toString().toLowerCase() == "span"
&& src.className.toString().toLowerCase() == "link"
&& src.getAttribute("href").toString().length > 0)
{
if(src.getAttribute("target") != null
&& src.getAttribute("target").toString().length > 0)
window.open(src.getAttribute("href").toString(), src.getAttribute("target").toString());
else
window.open(src.getAttribute("href").toString());
}
}
if(window.document.all != null)
window.document.attachEvent("onclick", Document_onclick);
else
window.document.addEventListener("click", Document_onclick, false);
</script>
</head> <body>
<span class="link" href="http://www.51js.com" target="_blank">无忧脚本1</span>
<span class="link" href="http://www.51js.com" target="_self">无忧脚本2</span>
</body>
</html>

搞定!我们已经初步将拥有特定属性的span元素模拟成了超连接元素,当然这里边还大有文章可做,但这并不是重点,而且将span元素模拟成超连接并没有什么实用价值,毕竟已经有那么好用的A元素可以供我们使用,所以要弄明白一点:搞清楚事件的传递,并且利用它为我们做一些本来很麻烦的工作,这才是本文的重点。

好了,又要告一段落了,下一篇文章的主题还没定,估计是再来一个实例或者另开一个主题,敬请期待。

 上一篇文章: 由浅到深了解JavaScript类
 下一篇文章: xhtml基础div标签
发表评论】【告诉好友】【打印此文】【关闭窗口


技术文章  资源下载
经典素材  社区论坛
 中大型美容美发店老…[1061]
 重庆多达学习俄语培…[2288]
 重庆恒祥广告有限公…[1990]
 重庆市南方阻燃电线…[2402]
 重庆舞美灯光音响有…[3145]
 重庆德鼎滤油机有限…[1908]
 重庆民生建材有限公…[2349]
 重庆集元科技有限公…[4128]
 重庆倍润商贸有限公…[2015]
 重庆腾达展览有限公…[3081]
 帝一网络创始人宣…--[3177]
 重庆vi设计在线祝…--[2740]
 重庆帝一网络书生…--[2855]
 馋嘴鸭的起伏和经…--[3000]
 机器感觉“卡”的…--[2929]
 ActionScript3打造…--[5757]
 在ASP文件中读取H…--[7239]
 vi设计经典案例--[63826]
 帅到掉渣-爆笑版勇…--[7066]
 一个女孩写的经典…--[6827]
没有相关文章
 (只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    没有任何评论
设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 重庆网站建设 | 
版权所有: vi设计在线  © 2005-2018 网站备案序号:渝ICP备06003824号
技术支持:帝一网络(重庆网站建设专家)