希望帖子不要沉下去,我感觉document.getElementById(id).onclick = function (){b(fin)}这句在赋fin值的时候出现了问题,为什么会把所以的参数都变成最后一个呢?

解决方案 »

  1.   

    <script type="text/javascript">
    function a(id){
        alert("这是第"+id+"个事件");
    }
    function b(id){
        alert("这是第"+id+"个事件");
    }
    function replaceClick(){
        var obj = document.getElementsByName("but");
        for(var i = 1;i<=obj.length;i++)
        {
            var fin = i+4;
            var id = "but"+ i;
            document.getElementById(id).onclick = function(_id){return function(){b(_id)}}(fin);
        } 
    }
    </script>
    <body>
        <input type="button" value="替换方法" onClick="replaceClick();">
    <input name="but" id="but1" type="button" value="click me" onClick="a(1);">
    <input name="but" id="but2" type="button" value="click me" onClick="a(2);">
    <input name="but" id="but3" type="button" value="click me" onClick="a(3);">
    <input name="but" id="but4" type="button" value="click me" onClick="a(4);">
    </body>
      

  2.   


    <script>
        function a(id)
    {
        alert("这是第"+id+"个事件");
    }
        function b(id)
    {
        alert("这是第"+id+"个事件");
    }
    function replaceClick()
    {
        var obj = document.getElementsByName("but");
        for(var i = 1;i<=obj.length;i++)
        {
            var fin = i+4;
            var id = "but"+ i;
            document.getElementById(id).onclick = new Function("aa("+fin+")");
        } //    document.getElementById("but").onclick = function (){b(2)};
    }
    function aa(num){
    b(num);
    }
    </script>
    <body>
        <input type="button" value="替换方法" onClick="replaceClick();">
    <input name="but" id="but1" type="button" value="click me" onClick="a(1);">
    <input name="but" id="but2" type="button" value="click me" onClick="a(2);">
    <input name="but" id="but3" type="button" value="click me" onClick="a(3);">
    <input name="but" id="but4" type="button" value="click me" onClick="a(4);">
    </body>
      

  3.   

    你的原来的代码:
    function replaceClick()
    {
        var obj = document.getElementsByName("but");
        for(var i = 1;i<=obj.length;i++)
        {
            var fin = i+4;
            var id = "but"+ i;
            document.getElementById(id).onclick = function (){b(fin)};
        } 
    //    document.getElementById("but").onclick = function (){b(2)};
    }其实形成了一个闭包,function(){b(fin)}中并没有定义fin,而是引用它的上一层对象的fin,这就导致,最后所有出来的结果是最后一个值。