无法调用未定义的方法'find'

时间:2013-08-19 19:58:40

标签: javascript jquery html

我正在尝试使用jQuery代码中的对象。

我几乎是这样的:

var opts = {
  ul: $(this).find('.carousel'),
  li: ul.find('li')
}

li属性提供错误Cannot call method 'find' of undefined

如何解决?

3 个答案:

答案 0 :(得分:11)

选择器是什么并不重要,当你声明它时,你无法访问你声明的对象的属性。

为什么要宣布ul?您在ul对象上创建了一个属性opts

丑:

您可能想要的是:

var opts = {
    ul: $(this).find('.carousel')    
}
opts.li = opts.ul.find('li');

但是如果你实际上不需要引用这两个组,那么:

清洁剂:

var opts = {
    li: $(this).find('.carousel li')    
}

同样好。

最清洁:

你也可以这样做:

var $carousel = $(this).find('.carousel');
var options = {
    carousel: $carousel,
    carouselItems: $carousel.find('li')
}

Godawful,但你要求它:

var CarouselOptions = (function () {
    var options = function (carousel) {
        this.carousel = $(carousel);
        this.carouselItems = this.carousel.find('li');
    };

    options.prototype.myOptionsFunction = function () {
        // Don't know what you want your object to do, but you wanted a prototype...
    };

    return options;
})();
var opts = new CarouselOptions($(this).find('.carousel'));

同时

(请注意您的this是什么,可能是您在页面上有多个.carousel元素,而这里您需要一个位于事件目标范围内的元素。)

答案 1 :(得分:0)

您的错误消息实际上是说$(this)未定义(换句话说,jQuery无法找到此元素)。因为除了您尝试设置的单个对象之外没有任何代码,我不知道this的实际值是什么。

我要做的是确保将this设置为某种元素。一个简单的console.log(this)应该处理它。如果this不是HTML元素,那么这就是您的问题。要么确保你在这样的jQuery事件函数内部:

$('#id').click(function() { 
    this === document.getElementById('id');  // true
});`

或者你可以放弃$(this)

var opts = {};
opts.ul = $('.carousel'),
opts.li = opts.ul.find('li') 

答案 2 :(得分:0)

var that = $(this);
var opts = {
    ul: that.find('.carousel'),
    li: ul.find('li')
}