Javascript未捕获TypeError:对象没有方法

时间:2011-09-10 22:20:01

标签: javascript

在我的javascript应用程序中,我在页面加载时收到以下错误。

Uncaught TypeError : Object #<Object> has no method 'showHideCleanupButton'

这会出现(在Chrome的调试器中)在方法'getAllItemsForDisplay'中爆炸,它调用'this.showHideCleanupButton'

这是jsFiddle上的链接: http://jsfiddle.net/cpeele00/4fVys/

非常感谢任何帮助: - )

谢谢,

克里斯

2 个答案:

答案 0 :(得分:1)

看来这是相关的代码:

    getAllItemsForDisplay: function() {
        $.getJSON('services/act_getAllItems/', function(data) {
            $('#items-list').empty();
            $('#items-listTmpl').tmpl(data).appendTo('#items-list');

            this.showHideCleanupButton();
            BeefyUtils.noSelect();
        });
    },

您期望在this回调中设置getJSON是什么?您是否在相关声明中设置了断点并查看了this的值是什么?

如果我理解jQuery doc是正确的,那么在getJSON调用中默认this将是对最初传入的ajax选项的引用。我认为可以更改this将是什么使用ajaxSetup,但我没有看到你已经完成了。

如果您想在this开头引用getAllItemsForDisplay,那么您需要将其保存到另一个可以使用的变量中:

    getAllItemsForDisplay: function() {
        var obj = this;
        $.getJSON('services/act_getAllItems/', function(data) {
            $('#items-list').empty();
            $('#items-listTmpl').tmpl(data).appendTo('#items-list');

            obj.showHideCleanupButton();
            BeefyUtils.noSelect();
        });
    },

答案 1 :(得分:1)

要捎带jfriend00的答案,请更改:

getAllItemsForDisplay: function() {
    $.getJSON('services/act_getAllItems/', function(data) {
        $('#items-list').empty();
        $('#items-listTmpl').tmpl(data).appendTo('#items-list');

        this.showHideCleanupButton();
        BeefyUtils.noSelect();
    });
},

到此:

getAllItemsForDisplay: function() {
    var self = this;
    $.getJSON('services/act_getAllItems/', function(data) {
        $('#items-list').empty();
        $('#items-listTmpl').tmpl(data).appendTo('#items-list');

        self.showHideCleanupButton();
        BeefyUtils.noSelect();
    });
},

这将为您提供名为getAllItemsForDisplay的上下文,我认为这是您想要的。