簡體   English   中英

函數中的Onclick事件無法調用嵌套函數

[英]Onclick event in a function not able to call nested function

我有一個功能,其中有另一個功能。 主函數中有一個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)'
    }

他們是正確的,您無法到達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'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM