有时候当某一对象的某一事件被触发时,它所要执行的程序可能是一大串,有可能是要呼叫某一函数,也有可能同时又要呼叫另一函数。document.getElementById("btn").onclick = method1; 
document.getElementById("btn").onclick = method2; 
document.getElementById("btn").onclick = method3;
如果这样写,那么将会只有medhot3被执行在IE中使用addachEvent ,var btn1Obj = document.getElementById("btn1"); 
//object.attachEvent(event,function); 
btn1Obj.attachEvent("onclick",method1); 
btn1Obj.attachEvent("onclick",method2); 
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1Mozilla系列中需要使用 addEventListenervar btn1Obj = document.getElementById("btn1"); 
//element.addEventListener(type,listener,useCapture); 
btn1Obj.addEventListener("click",method1,false); 
btn1Obj.addEventListener("click",method2,false); 
btn1Obj.addEventListener("click",method3,false);
执行顺序为method1->method2->method3以上mehtod1,method2,method3都是函数名称,可以对无参数函数进行绑定,但是无法使用带参数函数.

解决方案 »

  1.   

    楼主的代码是没有参数啊在事件处理函数中带参数,可以使用闭包,参考代码://事件处理函数
    //在事件处理
    function createHandler(param1, param2)
    {
        return function Add()
        {
            return param1 + param2;
        }
    }<input type="button" onclick="createHandler(1, 2)" />
      

  2.   

    <input onclick="alert()" type=button value="test"><input type=button value="click me" onclick="this.previousSibling.onclick=function (event){testFun(event,this,'12')};this.disabled=true;">
    <script>
    function testFun(event,obj,str)
    {
    event=event||window.event
    alert(event);
    alert(obj.onclick);
    alert(str);
    }
    </script>
      

  3.   

    这样说吧,
    <input type=button value="click" id="2">
    <script>
    function abc(a)
    {
       alert(a);
    }
    document.getElementById("2").onclick=abc("hello!");
    </script>
    以上给button的onclick事件绑定了一个事件处理程序,但是这样做只能绑定一个函数,我现在想绑定多个函数,因此想利用attachEvent和addEventListener对事件进行多次绑定.通用函数:
    function addEvent(elm, evType, fn, useCapture){ 
            if (elm.addEventListener){ 
                elm.addEventListener(evType, fn, useCapture); 
                return true; 
            } else if (elm.attachEvent){ 
                var r = elm.attachEvent("on"+evType, fn); 
                return r; 
            } else { 
                alert("Handler could not be removed"); 
            } 
        } 
    其中elm是绑定对象,evType是事件类型,如click,focus;fn是要绑定的函数,useCapture是否使用捕获模式.
    我可以这样写
    <input type=button value="click" id="2">
    <script>
    function abc(a)
    {
       alert(a);
    }
    var obj=document.getElementById("2");
    addEvent(obj, "click", abc, false)
    </script>
    这样虽然可以绑定多个事件,但却不能传递参数了.
      

  4.   

    或者解释下面这段:<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>新建网页 1</title>
    </head><body>
    <a href="#" id="mylink">这是连接</a>
    <script type="text/javascript">
    function AttachEvent(type, target, handler, owner)
    {
    var eventHandler = handler;
        if(owner)
        {
         // 在这里重新定义一个处理函数
         eventHander = function(e)
         {
         handler.call(owner, e);
         }
        }
        if(window.document.all)
         target.attachEvent("on" + type, eventHander );
        else
         target.addEventListener(type, eventHander, false);
    }function MyLink_Click(e)
    {
    alert(this.name);
    var target = e.srcElement || e.target;
    alert(target.href);
    }var myobj = new Object();
    myobj.name = "这是我的名字";var mylink = window.document.getElementById("mylink");
    AttachEvent("click", mylink, MyLink_Click, myobj);</script>
    </body></html>着重解释一下红色字体部分.
    多谢各位赐教!
      

  5.   

    你查查call ,apply 的用法,就是利用函数名,函数的参数 ,组合成新的带参数的函数
      

  6.   

    AttachEvent(type, target, handler, owner)里type是指事件类型,target是指绑定的对象,handler是指要绑定的处理程序,那么owner 是不是参数呢?
    如果是的话,我查了call的用法,handler.call(owner, e);这句好象是用owner的方法替换handler,那么owner不是参数?不明白,见笑了,能不能指点一下,诚恳求教!
      

  7.   


    <script>
    owner = {id:'a',name:'b'}
    function handler(myparam)
    {
    alert(this.id+' '+this.name+' '+myparam)
    }
    handler.call(owner, 'c');//will alert 'a b c';
    </script>