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

减小字体 增大字体

中国重庆vi设计在线推荐:面向事件驱动的编程

世间万物,千变万化,面向对象的编程亦是对现实社会的模拟,而javascript是一种基于对象并且很接近面向对象编程的编程语言,而我们web设计师/程序员跟javascript打交道亦要直面javascript才能够把网页写得更加丰富多彩.在此先搞清楚一点就是:javascript并不仅仅用在Web上,它可以用在许多领域,当然我这里讨论的更多的是javascript在Web上的应用,并且主要是事件方面的应用.

javascript并不能直接对Web对象进行操作,而是要通过浏览器提供的Document Object Modle(即常听说的DOM,文档模型对象)来操作对象.HTML是一个树文档,它以HTML标签为根,其它的元素都是在HTML标签之内,一级一级地延伸下去.而DOM中,则以window为根对象,其它的对象则为它的子对象或者它的子对象的子对象.

首先来认识一下什么叫事件,请看下边的代码:

<html>
<head>
</head>
<body>
<input type="button" value="这是一个按钮" onclick="window.alert(this.value);" />
</body>
</html>

很简单的一个实例,页面只有一个按钮,它的value值为"这是一个按钮",并且我们给它指定了onclick属性,它的值为一行javascript代码,使用了window对象的alert方法,将this.value的内容显示在警告窗体中.这里的this是啥呢?this就是当前操作的对象,即该input对象.这份代码告诉浏览器:"当前对象受点击"的时候要调用window.alert(this.value)这行代码,因此浏览器在按钮受点击的时候就执行了相关的操作.一个对象可以有许多事件,比如说单击(click),双击(d鼠标移开(mouseout)等等,这些事件经常在各种流传的代码中可以看到.那如何给一个对象设置bclick),鼠标移到上边(mouseover),事件发生时执行的代码呢?一般来说有以下三种方式:

第一种:直接设置HTML元素的事件属性,名称一般是on+事件名称,比如说单击事件即为onclick,实例请见上边的代码

第二种:在script中对HTML对象设置事件属性,名称一般也是on+事件名称,比如说obj.onclick = 函数,请见实例代码:


<html>
<head>
</head>
<body>
<input type="button" value="这是一个按钮" id="mybut" />
<script type="text/javascript" language="javascript">
var mybut = window.document.getElementById("mybut"); // 根据HTML元素的id属性获取该元素在DOM中的对象
mybut.onclick = function()
{
window.alert(this.value);
}
</script>
</body>
</html>

<html>
<head>
</head>
<body>
<input type="button" value="这是一个按钮" id="mybut" />
<script type="text/javascript" language="javascript">
var mybut = window.document.getElementById("mybut"); // 根据HTML元素的id属性获取该元素在DOM中的对象
function MyButton_onclick()
{
alert(this.value);
}
mybut.onclick = MyButton_onclick;
</script>
</body>
</html>

这第二种方式有两种方法来指定执行的代码,但本质上是一样的,同样是指定一个函数给对象,要求对象当某事件发生的时候执行该函数.


第三种方式: 使用obj.attachEvent(IE浏览器)/obj.addEventListener方法来指定,建议使用此方法:

<html>
<head>
</head>
<body>
<input type="button" value="这是一个按钮" id="mybut" />
<script type="text/javascript" language="javascript">
var mybut = window.document.getElementById("mybut"); // 根据HTML元素的id属性获取该元素在DOM中的对象
function MyButton_onclick(e)
{
var tag = window.document.all != null ? e.srcElement : e.target; // 获取事件触发来源对象,即按钮对象(分为IE和Mozilla/firefox,e是event对象.
window.alert(tag.value);
}
if(window.document.all) // IE浏览器
mybut.attachEvent("onclick", MyButton_onclick);
else
mybut.addEventListener("click", MyButton_onclick, false); //注意这里第一个参数是click而不是onclick
</script>
</body>
</html>

为什么建议第三种方式呢?上边所列的第一种方式很明显只是设置一下元素属性,只可能指定一次,而第二种方式与第三种方式的差别可以从下边的实例中看出来:

<html>
<head>
</head>
<body>
<input type="button" value="这是第二种方式的示例按钮" id="mybut1" />
<input type="button" value="这是第三种方式的示例按钮" id="mybut2" />
<script type="text/javascript" language="javascript">
var mybut1 = window.document.getElementById("mybut1");
var mybut2 = window.document.getElementById("mybut2");
// --------------第二种方式----------------
function MyButton_onclick1_1()
{
alert("指定的第一个函数");
}
function MyButton_onclick1_2()
{
alert("指定的第二个函数");
}
mybut1.onclick = MyButton_onclick1_1;
mybut1.onclick = MyButton_onclick1_2;
//--------------第二种方式-----------------
function MyButton_onclick2_1(e)
{
alert("指定的第一个函数");
}
function MyButton_onclick2_2(e)
{
alert("指定的第二个函数");
}
if(window.document.all)
{
mybut2.attachEvent("onclick", MyButton_onclick2_1);
mybut2.attachEvent("onclick", MyButton_onclick2_2);
}
else
{
mybut2.addEventListener("click", MyButton_onclick2_1, false);
mybut2.addEventListener("click", MyButton_onclick2_2, false);
}
</script>
</body>
</html>

上边的示例使用了两个按钮,并且使用了第二种方式与第三种方式先后指定了两个函数给click事件,点击第一个按钮可以看到弹出了"指定的第二个函数",说明只有MyButton_onclick1_2函数生效,而先前指定的MyButton_onclick1_1被MyButton_onclick1_2代替了。点击第二个按钮可以看到弹出了两个窗体,显示的内容分别是"指定的第一个函数"和"指定的第二个函数",很明显,使用attachEvent/addEventListener可以即增加要执行的程序并且还能够保留原有的程序,在IE中,它们是根据增加的顺序倒序执行,即先执行后添加的MyButton_onclick2_2,然后再执行MyButton_onclick2_1,而Firefox中则是相反,先执行MyButton_onclick2_1然后再执行MyButton_onclick2_2。。没办法,IE和Firefox是冤家,对着干。。呵呵

好了,俺还有项目要赶,只好先写到这里,最近比较忙,呵呵。下篇文章计划将利用本文的内容写一点应用,内容为:使用DHTML将span元素模拟成A元素,它亦是本文的后续文章,但不仅仅是关于事件了,还会配合CSS。

PS: 以上内容皆为本人所知,如有不当之处欢迎指正,不用给俺面子,文章内容严谨才不会误导读者嘛。。同时也呼吁有能力的网友也加入到原创计划中来。感谢此文的读者以及支持原创计划的网友。

 上一篇文章: robots_txt与The Robots META介绍
 下一篇文章: 可以四个方向滚动的图片
发表评论】【告诉好友】【打印此文】【关闭窗口


技术文章  资源下载
经典素材  社区论坛
 中大型美容美发店老…[1060]
 重庆多达学习俄语培…[2288]
 重庆恒祥广告有限公…[1990]
 重庆市南方阻燃电线…[2402]
 重庆舞美灯光音响有…[3144]
 重庆德鼎滤油机有限…[1908]
 重庆民生建材有限公…[2349]
 重庆集元科技有限公…[4128]
 重庆倍润商贸有限公…[2015]
 重庆腾达展览有限公…[3081]
 帝一网络创始人宣…--[3177]
 重庆vi设计在线祝…--[2740]
 重庆帝一网络书生…--[2854]
 馋嘴鸭的起伏和经…--[2999]
 机器感觉“卡”的…--[2929]
 ActionScript3打造…--[5756]
 在ASP文件中读取H…--[7238]
 vi设计经典案例--[63824]
 帅到掉渣-爆笑版勇…--[7065]
 一个女孩写的经典…--[6826]
  • 面向事件驱动的编程…[2571]

  •  (只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 重庆网站建设 | 
    版权所有: vi设计在线  © 2005-2018 网站备案序号:渝ICP备06003824号
    技术支持:帝一网络(重庆网站建设专家)