| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • javascript实例教程(20)…

  • js控制excel打印完美解决方案

  • 一个简单的javascript菜…

  • 一个很通用的javascript…

  • 完美解决一个事件激活多个函…

  • 用javascript绘图—JS2D…

  • 在客户端设置cooke和获取coo…

  • 一个解析URL及图片地址的JS函…

  • 用javascript绘图—JS2D…

  • 60秒倒计时的一个小java…

  • Q
    您现在的位置: 我是IT人 >> 网站制作 >> JSP >> 文章正文
    完美解决一个事件激活多个函数(2)           
    完美解决一个事件激活多个函数(2)
    作者:网络 文章来源:转载 点击数: 更新时间:2006-1-19
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
     


      可是在一个页面中,我们可能会遇到有多个事件要激活多个函数,每个事件都要写一遍那样的代码,显然不是好主意。聪明的读者可能已经想到,应该写成一个函数activeMore(),哪个事件要激活多个函数的,直接就用activeMore()就行。

      但是在上一部分中我们把事件的toString()当作JavaScript脚步本运行,实际上是运行一段函数代码,如果写成一个函数时还是用这个方法,即为函数中嵌套函数,将会出现意想不到的错误。 于是我们写成函数时把事件的toString()中的“function anonymous()”字符去掉,运行时就不是一个函数,而是函数内部的代码了。另外我们还可以定义先激活原有的函数还是先激活现在要激活的函数。最后为了方便使用,我们把事件和要激活的函数放在一起作为参数,写成以下函数:


    function activeMore(event_function,order){
    // order 为负数时先激活myFunction再激活前面的脚本
    var isSn=event_function.indexOf("=",0);
    var myEvent=event_function.substring(0,isSn);
    var myFunction=event_function.substring(isSn+1,event_function.length);
    var prefunction="";
    if(eval(myEvent)) prefunction= eval(myEvent).toString().replace('function anonymous()',"");

    if(order<0) eval(myEvent+"=new Function(myFunction+'\\n'+prefunction)");
    else eval(myEvent+"=new Function(prefunction+'\\n'+myFunction)");
    }

      以上函数我们先把参数“event_function”进行字符串分析,得到事件(myEvent)和要激活的函数(myFunction),然后取得原来激活的函数(preFunction),最后把多个函数放在一起激活。因为我们只是把“function anonymous()”去掉,preFunction字符串的两端会带有“{ }”号,但并不影响程序的运行。

      下面我们举一个实际应用的例子:使网页中所有的链接都不出现虚线框。

      为了达到这个目的,我们给所有的链接的onfocus事件添加一个激活函数“blur()”。为了保证一些链接原有的onfocus事件激活函数仍然有效,我们要用一次activeMore()函数;为了能够得到所有的链接,我们用到document.body的onload事件,又要用一次activeMore()函数:

    //使链接不出现虚线框:
    function blurLinks(){
    for(i=0;i activeMore("document.links["+i+"].onfocus=if(this.blur)this.blur()",-1);
    }
    }
    activeMore("document.body.onload=blurLinks()");

      链接的onfocus事件(document.links[i].onfocus)要激活的函数是“if(this.blur)this.blur()”,参数order的值为-1表先激活该函数再激活它们原有的函数;document.body.onload事件要激活的函数是“blurLinks()”,参数order的值省略(或为非负数)表先激活它原有的函数再激活“blurLinks()”。

      从例子中可以看到,这个函数用起来还挺简单吧。有了activeMore()函数,无论多少个事件要激活多个函数,都可以用同样的语法解决了!

     

    [1]

    文章录入:54iter    责任编辑:54iter 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |