“this.hide();不是一个函数”调用类中的方法

时间:2012-11-21 14:41:53

标签: jquery

我有以下代码:

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只是为了简化我的问题

3 个答案:

答案 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'))