我正在尝试创建一个名为 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 元素时,应该删除它,因为在click事件中触发了 cerrar()方法。但它不起作用。你能指出我正确的方向吗?
答案 0 :(得分:1)
this
声明中的 mostrar
指向匿名函数实例,请使用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"
});
};
}