0

我正在尝试制作一个名为Dialogo的对象。这个想法是创建一些函数,然后在另一个方法本身内部调用它们。看一看:

function Dialogo(tamano){
    this.tamano = tamano;

    this.cerrar = function(){
        $('#dialogo_fondo').remove();
    };

    this.mostrar = function(){
        var dialogo_fondo = $('<div>').attr({id: 'dialogo_fondo' });
        $('body').fadeIn("slow", function(){$(this).append(dialogo_fondo);});
        $('#dialogo_fondo').css( {"width": $(window).width(), "height": $(window).height()});
        $('#dialogo_fondo').click(function(){ 
            this.cerrar(); 
        });
    };  
}  

使用 jquery 1.7.2。根据代码,当我点击#dialogo_fondo元素时,它应该被删除,因为在点击事件中触发了cerar()方法。但它不起作用。你能指出我正确的方向吗?

4

1 回答 1

1

thismostrar声明中指向匿名函数实例,用 . 检查它console.log(this);。因此,您需要创建对外部对象的另一个引用var that = this;并改用它:

function Dialogo(tamano){
    var that = this; // <--- here is the magic

    this.tamano = tamano;

    this.cerrar = function(){
        $('#dialogo_fondo').remove();
    };

    this.mostrar = function(){
        var dialogo_fondo = $('<div>').attr({id: 'dialogo_fondo' });
        $('body').fadeIn("slow", function(){$(this).append(dialogo_fondo);});
        $('#dialogo_fondo').css( {"width": $(window).width(), "height": $(window).height()});
        $('#dialogo_fondo').click(function(){ 
            that.cerrar(); // <---- use "that", not "this"
        });
    };  
}  
于 2012-08-14T21:03:28.370 回答