<!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>
    <title></title>
<body>
<div id="show">hi </div>
<input type="button" id="Button1" value=" Button1 " />
<input type="button" id="Button2" value=" Button2 " />
<input type="button" id="Button3" value=" Button3 " />
<input type="button" id="Button4" value=" Button4 " />
</body>
</html>
<script language="javascript" type="text/javascript">
    var divobj = window.document.getElementById("show");
    var SS = ["Button1", "Button2", "Button3"];
    for (var i = 0; i < SS.length; i++) {
        var SD = document.getElementById(SS[i]);
        document.getElementById(SS[i]).onclick = new Function("alertMsg(\'" + divobj + "\'," + (i+1) + ")");
    }
    document.getElementById("Button4").onclick = function () {
        alertMsg(divobj,4);
    }
    function alertMsg(obj, v) {
        alert(obj.innerHTML + v)
    }
</script>重点就在这个动态函数里的 divobj 该怎样写才能跟 点击 Button4 一样的效果  
new Function("alertMsg(\'" + divobj + "\'," + (i+1) + ")");

解决方案 »

  1.   


      var divobj = window.document.getElementById("show");
        var SS = ["Button1", "Button2", "Button3"];
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
            document.getElementById(SS[i]).onclick = new Function(alertMsg(SD,i+1));
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(this,4);
        }
        function alertMsg(obj, v) {
            alert(obj.innerHTML + v)
        }
      

  2.   


        var SS = ["Button1", "Button2", "Button3"];
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
            document.getElementById(SS[i]).onclick = function(){alertMsg(this)};
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(this);
        }
        function alertMsg(obj) {
            alert(obj.id)
        }
    //刚贴出来的代码没成功
      

  3.   


    document.getElementById(SS[i]).onclick = function(){alertMsg(this)};这个并不是我想要的那样
    我要实现的是,在点击 Button 后传入的对象参数不是自己,而是一个已经定义的 
    var divobj = window.document.getElementById("show");
    ------------------------------
    用function(){}可以传入对象参数,但i参数就已经不是每次循环的哪个i了.也就是点Button1不是显示
    hi 1,而是hi 4,点Button2 也不会显示hi 2,也是显示hi 4.也就是说i的值不是本次循环的值而是最后一个值.用new Function{};i传入的值可以是各次循环的数值.var divobj = window.document.getElementById("show");
        var SS = ["Button1", "Button2", "Button3"];
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
            document.getElementById(SS[i]).onclick = function(){
                 alertMsg(divobj,(i+1));
            };
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(divobj,4);
        }
        function alertMsg(obj, v) {
            alert(obj.innerHTML + v)
        }
      

  4.   


        var divobj = window.document.getElementById("show");
        var SS = ["Button1", "Button2", "Button3"];
    var arr=new Array();
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
    arr[SD.id]=i+1;
            document.getElementById(SS[i]).onclick = function(){
    alertMsg(divobj,arr[this.id]);//有点取巧,不知道是否你想要的
    };
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(divobj,4);
        }
        function alertMsg(obj, v) {
            alert(obj.innerHTML + v)
        }
      

  5.   

    luxu001207 高人啊,,虽然不是我想知道的,但可以暂时解决到问题
      

  6.   

    但如果有大虾能告诉我 new Function();如何能传入 一个对象作为参数就更好了
      

  7.   

    这个...这个...
    new Function()用的时候没看到传入什么参数
    刚才尝试了N种方法,网上搜了又搜,暂时没找到答案,也许不行,也许可以
      

  8.   


    var divobj = window.document.getElementById("show");
        var SS = ["Button1", "Button2", "Button3"];
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
            SD.alt = i + 1;   //设置个alt属性省点事,呵呵
            document.getElementById(SS[i]).onclick = function(){
                alertMsg(divobj, this.alt);
            };
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(divobj,4);
        }
        function alertMsg(obj, v) {
            alert(obj.innerHTML + v)
        }
      

  9.   


        var divobj = window.document.getElementById("show");
        var SS = ["Button1", "Button2", "Button3"];
        for (var i = 0; i < SS.length; i++) {
            var SD = document.getElementById(SS[i]);
            document.getElementById(SS[i]).onclick = new Function("alertMsg(divobj,"+i+"+1)");//你试试看,呵呵
        }
        document.getElementById("Button4").onclick = function () {
            alertMsg(divobj,4);
        }
        function alertMsg(obj, v) {
            alert(obj.innerHTML + v)
        }
      

  10.   

    果然是高人啊...哈哈 谢谢luxu001207
      

  11.   

    Function是将字符串生成函数 所以只能传对象的可见域的名称window.mynamespace={name:'kk'};var f=Function('alert(window.mynamespace.name);');
    f();用不用new看实际情况 反正 FUNCTION返回一个匿名function
      

  12.   

    恩,,如果divobj 参数是一个局部的对象参数,这样写就不行了