<html> 
<head> 
<meta   http-equiv="Content-Type"   content="text/html;   charset=utf-8"> 
<title> 显出你的身手 </title> 
</head> 
<body> 
<script   language="javascript"> function $(id) 

    return   document.getElementById(id); 
}
function AddEvent()   //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。 

//this.setAttribute("onmouseout",funck)
for(var i=0;i<arguments.length;i++)
{
this.attachEvent(arguments[i][0],(function(x){var arg=arguments.callee.caller.arguments[x];return function(){arg[1].call(this,arg[2])}})(i))
}

function funck()   //自己定义 
{     
    alert("funck "+arguments[0]); 

</script> <div   id="addev"   onmouseover="Test(this)"> 测试添加事件 </div> 
<script language="javascript"> 
var _i=0;
function Test(objs) 

  AddEvent.apply(objs,[["onmouseout",funck,_i++],["onmouseout",funck,_i++]])//根据上面写的相对应。 

</script> 
<div id="debug"></div>
</body> 
</html> 

解决方案 »

  1.   

    To:萨依阿法不错!!实现了!!恭喜你 中着了。如下 4.里的, 小提示:你鼠标放上去第一次是正确,鼠标离开是执行一次   ;第二次再放上去,鼠标离开是执行两次,依次类推。 我想要的是覆盖,正确的执行一次。所以您写的结果是 :
    第一次鼠标放上去然后离开: 弹出 funck 1, 弹出funck 0  正确!我想要的,渴望要的。
    第二次再放上去,鼠标离开:弹出 funck 2, 弹出funck 3,弹出 funck 1, 弹出funck 0  我只要他 弹出 funck 1, 弹出funck 0   就可以了。多了两次!
      

  2.   

    更正:上面的是To: chaonan  不是  To:萨依阿法  说明一点:<div   id="addev"   onmouseover="Test(this)"> 测试添加事件 </div>     这个死也不能改。比如该成:
    <div   id="addev" > 测试添加事件 </div>
    <script>
      AddEvent(参数);
    </script>----------------------------------------------------------------------------------------To gzdiablo    你有疑问吗?
      

  3.   

    <html>   
    <head>   
    <meta       http-equiv="Content-Type"       content="text/html;       charset=utf-8">   
    <title>   显出你的身手   </title>   
    </head>   
    <body>   
    <script       language="javascript">   function   $(id)   
    {   
            return       document.getElementById(id);   

    function   AddEvent()       //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。   
    {   
    //this.setAttribute("onmouseout",funck) 
    //this.attachEvent(arguments[i][0],) 
    var en = arguments[0];
    this[en]=function()
    {
    var funcs = this[en+"_funcs"];
    for(var i=0;i<funcs.length;i++) funcs[i].call()
    }
    this[en+"_funcs"]=[];
    for(var   i=1;i <arguments.length;i++) 
    {
    this[en+"_funcs"][i-1]=(function(x){var   arg=arguments.callee.caller.arguments[x];return   function(){arg[0].call(this,arg[1])}})(i)

    }   
    function   funck()       //自己定义   
    {           
            alert("funck   "+arguments[0]);   
    }   
    </script>   <div       id="addev"       onmouseover="Test(this)">   测试添加事件   </div>   
    <script   language="javascript">   
    var   _i=0; 
    function   Test(objs)   
    {   
        AddEvent.apply(objs,["onmouseout",[funck,"1"],[funck,"2"]])//根据上面写的相对应。   
    }   
    </script>   
    <div   id="debug" onclick="alert(addev.onmouseout)"> dsf</div> 
    </body>   
    </html> 
      

  4.   

    用闭包添加事件,我没大看明白楼主的意思http://feb-.blog.163.com/blog/static/1657789200792722111219/
      

  5.   

    To: FEB15通过一个公用的函数,来添加相关的事件。-----------------------------------------------------------------------<script  language="javascript">       function  $(id)       
    {       
                    return    document.getElementById(id);       
    }   
    function   AddEvent(对象,事件名,函数名)  //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。       
    {       
    }       
    function  fun()               //自己定义       
    {                       
       alert("Ok);       
    }       
    </script>       <div  id="addev"   onmouseover="Test(this)">       测试添加事件       </div>      <script   language="javascript"> function   Test(objs) 

      AddEvent(对象,事件名,函数名); 

    </script> -----------------------------------------------------------------------------------------解释:原来 
     <div onmouseover="Test(this)">dddd</div>
    鼠标放上去执行一次: AddEvent(对象,事件名,函数名); 如:AddEvent(this,"onmouseout",fun); 
     
    相当:odiv.addEventListener("onclick",fun); 结果:
    <div onmouseover="Test(this)" onmouseout="fun()" >dddd</div>   //对吗??再执行一次:  AddEvent(对象,事件名,函数名); 如:AddEvent(this,"onmouseout",fun); 相当于:odiv.addEventListener("onclick",fun); 结果:
    <div onmouseover="Test(this)" onmouseout="fun() fun()" >dddd</div>   //对吗??问题是:我要的是
    onclick="fun()“
    而不是
    onclick="fun() fun()"
      

  6.   

    希望:
    function Tests(objs)
    {
      AddElementEvent(objs,'mouseout',setn,[setn参数放后面]);
     }不变,apply() 放在AddElementEvent() 里。
      

  7.   

    To:gzdiablo写个公用的函数  padd()。给当前操作对象添加事件。<div    onmouseover="test()">鼠标放上去,添加一个事件onmouseout="fun()"</div>执行要正确,下面弹出的ok只、仅仅只需要一次。
    function padd()
    {
      //实现添加这个事件的过程。
    }function fun()    //自己写的,有可能有参数。
    {
      alert("OK");
    }function test()
    {
       padd(对象,事件名(onmouseout),函数名(fun),[函数参数]);
    }   在任何一个对象的事件(onmouseup="funu()")对应的函数(funu())里 调用 padd(对象,事件名(onmouseup),函数名(other_fun),[函数参数1],[函数参数2],[函数参数3]);
       来增加相对的事件(onclick="other_fun(1,3,'name')")。
      

  8.   

    TO:btbtd要谈价值,那当然,我也说不清楚。实现就行。
      

  9.   

    To:gzdiablo就是通过一个事件给另外一个事件添加处理方法是不? 答:是通过一个事件,来给该对象的另一个事件添加处理方法    是这样的。  我闹不懂为什么要在添加事件的处理方法时,来指定事件的参数答:事件对应的函数有时有参数,有可能没参数。
        所以要考虑全面,而且通用。
        
    js事件有多少呢?起码也有(>20),所以要做为个参数, 然后给事件对应的函数 也要有参数吧。
      

  10.   

    还是不大理解你的意思 随便写了一个看看是不是你想要的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
    </body>
    </html>
    <script language="javascript">
    function test()
    {
    padd(document.getElementById("a1"),"onmouseout","fun",1,2,3);
    padd(document.getElementById("a1"),"onclick","fun",1,2,3,4,5,6,7,8);
    padd(document.getElementById("a2"),"onmouseout","fun",4,5,6);
    }
    function padd(obj,eventkey,handler)
    {
    var arg = [];
    for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    handler = eval(handler);
    if(obj && obj[eventkey]==null && typeof(handler)=="function")
    obj[eventkey] = function(){handler.call(obj,arg);}
    }
    function fun()
    {
    var arg = [];
    for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    alert(arg);
    }
    </script>
      

  11.   


    不实现参数, 动态添加的事件能实现参数?
    只能在添加的函数内部以 arguments.length 判断.----------------------<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shawl.qiu template</title>
    <style type="text/css">
    /* <![CDATA[ *//* ]]> */
    </style>
    <script type="text/javascript">
    /*<![CDATA[*/
     if (navigator.appName=="Microsoft Internet Explorer") 
     {
      //最大化窗口
      self.moveTo(-5,-5)
      self.resizeTo(screen.availWidth +8,screen.availHeight+8)
      //这个脚本定义的宽度其实比原窗口还要大那么一点.
     }
    /*]]*/
    </script>
    </head>
    <body>
    <html> 
    <head> 
    <div id="XDiv" onmouseover="Test(this)"> 测试添加事件 </div><script language="javascript"> 
    var _GlobalCount = 1;function Test(Ele)
    {
     _GlobalCount = 1;
     defaultStatus = "";
     fPlusEvent(Ele, "onmouseout", fFunc)
    }
    function fFunc()   //自己定义 

     if(_GlobalCount===1) 
     {
      defaultStatus = _GlobalCount;
     }
     else
     {
      defaultStatus += ", "+_GlobalCount;
     } 
      _GlobalCount++;
    }function fPlusEvent(Obj, sEvtName, Func)
    {// shawl.qiu code, void return
     if(document.addEventListener)
     {
      sEvtName = sEvtName.replace(/^on/i, "");
      Obj.addEventListener(sEvtName, Func, false);
     }
     else if(document.attachEvent)
     {
      if(Obj[sEvtName] == null)
      {
       Obj[sEvtName] = Func;
      }
      else
      {
       Obj.attachEvent(sEvtName, Func);
      }
     }
    } // end function fPlusEvent
     
    function __E(sTag, oDocument)
    { // shawl.qiu code, return Element
     if(!oDocument) oDocument = document;
     return oDocument.createElement(sTag);
    } // end function __E(sTag, oDocument)
     
    function __Id(sTag, oDocument)
    { // shawl.qiu code, return Element
     if(!oDocument) oDocument = document;
     return oDocument.getElementById(sTag);
    } // end function __Id(sTag, oDocument)
    </script> 
    </html>
    </body>
    </html>
      

  12.   

    还要多次绑定? 改下看看
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
    </body>
    </html>
    <script language="javascript">
    var i=0;
    function $AE(o,_eventKey,_handler,bubble)
    {
    _eventKey = _eventKey.replace(/^on/i,"");
    if(document.all)
    o.attachEvent(["on", _eventKey].join(''),_handler);
    else
    o.addEventListener(_eventKey,_handler,!!bubble);
    }
    function $(_id){return document.getElementById(_id);}
    function test()
    {
    i++;
    padd($("a1"),"onmouseout","fun",i);
    padd($("a2"),"onmouseout","fun",i);
    }
    function padd(obj,eventkey,handler)
    {
    var arg = [];
    for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    handler = eval(handler);
    if(obj && typeof(handler)=="function")
    $AE(obj,eventkey,function(){handler.call(obj,arg);},true)
    }
    function fun()
    {
    var arg = [];
    for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    alert(arg);
    }
    </script>
      

  13.   

    To:gzdiablo//fun  不要写任何代码,每次执行操作,只弹出一次,就可以了。
    我要杜绝多次绑定!!?我的问题所在。
     function  fun() 
    {
     alert("OK");
    }改成上面的代码后测试 你的代码,出现  4里所说的
    小提示:你鼠标放上去第一次是正确,鼠标离开是执行一次   ;第二次再放上去,鼠标离开是执行两次,依次类推。 
    备注:我的代码就是你那个模式写的。结果跟你的一样。
      

  14.   

    To: btbtd你的代码,测试结果一样,只是你显示在ie的状态栏里。
    defaultStatus 默认的。
    多次测试的时候
    数据如下:
    一次:1
    二次:1,2
    三次:1,2,3
    四次:1,2,3,4
    因为你用了全局变量来记数我希望的是:不管你鼠标放上去是几次,鼠标离开的话就只能是同一个数据 1 。
      

  15.   

    //这个是单次绑定的 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
    <div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
    </body>
    </html>
    <script language="javascript">
    var i=0;
    function $(_id){return document.getElementById(_id);}
    function test()
    {
    i++;
    padd($("a1"),"onmouseout","fun",i);
    padd($("a2"),"onmouseout","fun",i);
    }
    function padd(obj,eventkey,handler)
    {
    var arg = [];
    for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    handler = eval(handler);
    if(obj && obj[eventkey]!=null && typeof(handler)=="function")//允许修改参数就去掉对obj[eventkey]!=null的判断 不允许修改参数就加上
    obj[eventkey] = function(){handler.call(obj,arg);};
    }
    function fun()
    {
    var arg = [];
    for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
    alert(arg);
    }
    </script>
      

  16.   

    这句搞错了应该是==
    if(obj && obj[eventkey]==null && typeof(handler)=="function")//允许修改参数就去掉对obj[eventkey]==null的判断 不允许修改参数就加上
      

  17.   

    To:ALLjs高手是有的,今天才碰到!gzdiablo  正解!20楼代码正确!结贴需要等段时间,现在没那么多分了!下了几本书。谢谢!