我有以下代码:
var Modal = Class.extend({
//--- Default options
defaults: {
width: 300,
height: 200
// . . . more options
},
//--- Initialize the Modal class
init: function (options) {
//--- Extend defaults and options
this.options = jQuery.extend(this.defaults, options);
},
//--- Create the Modal
create: function () {
// . . . code removed
var closeButton = document.createElement("div");
jQuery(closeButton)
.attr({ "class": "modal_close" })
.css({ "cursor": "pointer" })
.live("click", function () {
this.closeModal();
})
.appendTo(modalHead);
// . . . more code
},
//--- Hide the Modal
closeModal: function () {
// TODO : Code to hide the modal
jQuery("#modal_container").fadeOut(200).remove();
jQuery("#lean_overlay").fadeOut(200).remove();
}
});
现在,当我在create方法中的click事件中尝试调用delete方法时,我收到此错误:
this.closeModal(); is not a function
我在这里错过了什么?
编辑:将隐藏功能更改为closeModal只是为了简化我的问题
答案 0 :(得分:8)
将this.hide();
替换为$(this).hide();
稍后编辑:
在输入this
.live()
create: function () {
// . . . code removed
var closeButton = document.createElement("div");
var myModal = this;
jQuery(closeButton)
.attr({ "class": "modal_close" })
.css({ "cursor": "pointer" })
.live("click", function () {
myModal.closeModal();
})
.appendTo(modalHead);
// . . . more code
},
答案 1 :(得分:0)
这个问题源于jQuery已将事件引发的DOM元素绑定到this
。要解决这个问题,请使用以下
.live('click', this.closeModal)
如果要在Modal
init
中缓存对function
的当前实例的引用,您可以执行以下操作:
init: function () {
this.me = this;
}
引用它时,请记住使用this.me
(不只是me
)。
答案 2 :(得分:0)
尝试:
.live('click', $.proxy(this, 'hide'))