0

我试图向刚刚创建的 div 添加一个操作,但我遇到了一些错误,我尝试在 chrome 中使用检查器并看到浏览器运行"$(ndiv2).click(function(){ this.dispose() });"正常,错误发生在鼠标单击操作中

function gMessageBox(){
this.id=new Date().getTime();
this.boxId="div"+this.id;
this.boxTextId="txt"+this.id;
this.obj=null;
}
gMessageBox.prototype = {
    show: function(message){
        if(document.getElementById("div_messageshow")==null){
        var _body = parent.document.getElementsByTagName('body') [0];
        var ndiv=document.createElement("div");//Container
        var nspan=document.createElement("span")
        nspan.setAttribute("id", this.boxTextId );
        nspan.innerHTML=message;
        ndiv.setAttribute("id", this.boxId );
        var ndiv2=document.createElement("div");//close
        ndiv2.innerHTML="Close";
        ndiv2.setAttribute("style","float: right;cursor:pointer;");

        $(ndiv2).click(function(){ this.dispose() });

        ndiv.appendChild(nspan);
        ndiv.appendChild(ndiv2);
        _body.appendChild(ndiv);
        this.obj=ndiv;
                 }
    },
    dispose: function(){
        alert("dispose");
                    //do sth
    }
};


var mb=new gMessageBox();
mb.show("im message box");
4

1 回答 1

1

您的问题是,this在您作为回调传递的匿名函数中,指的是该函数的执行上下文,而不是指该函数的执行上下文gMessageBox。要么做

var that = this;
$(ndiv2).click(function(){ that.dispose(); });

或者

$(ndiv2).click((function(){ this.dispose(); }).bind(this));
于 2013-05-10T20:55:37.953 回答