函数中的Onclick事件无法调用嵌套函数

时间:2014-07-01 16:24:15

标签: javascript

我有一个功能,它有另一个功能。 main函数中有一个onclick事件,我希望它调用内部函数。但是,当我单击该元素时,它表示该函数未定义。 onclick事件处于for循环中。这是代码:

function renk(){
        function metinRenginiDegistir(boya){
            //seciliMetinDegistir("<font color='"+boya+"'>"+seciliMetin()+"</font>");
            alert("a");
        }
        var sagic;
        var renkler=new Array("#000000","#FF0000","#00FF00","#0000FF","#FFFF00","#00FFFF","#FF00FF","#666666");
        var adlar=new Array("Siyah","Kırmızı","Yeşil","Mavi","Sarı","Turkuaz","Magenta","Gri");
        for(i=0;i<renkler.length;i++){
            sagic=sagic+"<tr><td><div **onclick='metinRenginiDegistir(this.style.background)'** style='cursor:pointer;width:28px;height:28px;background:"+renkler[i]+";margin-left:17px;'></div></td><td>"+adlar[i]+"</td><td>"+renkler[i]+"</td></tr>";
        }
        sagic="<center><table id='renklerinTablosu'><tr><th>Önizleme&nbsp;&nbsp;</th><th>Renk Adı&nbsp;&nbsp;</th><th>Renk Kodu</th></tr>"+sagic+"</table></center>";
        sag.innerHTML=sagic.replace("undefined","");
        //document.getElementById("renklerinTablosu").getElementsByTagName("div").onclick=function(){alert("a");}
        // onclick='metinRenginiDegistir(this.style.background)'
    }

1 个答案:

答案 0 :(得分:2)

他们是正确的,你不能达到metinRenginiDegistir(),因为它不在范围内。你能做什么,重新写'function metinRenginiDegistir()'为'this.metinRenginiDegistir = function(){}。bind(this);'。现在,将变量'onclick'设置为'this.metinRenginiDegistir()',(仅当你在'renk()'中设置它)或者在'renk'()'之外设置一个变量等于renk的实例()并使用:

var renkInstance = new renk();

...onclick = renkInstance.metinRenginiDegistir;

你不能从'renk()'之外到达'metinRenginiDegistir',但是你可以使用你的'renk()',renkInstance的实例从'renk()的范围到达'metinRenginiDegistir'。