无法调用方法'查找'的未定义

Cannot call method 'find' of undefined

本文关键字:未定义 查找 调用 方法      更新时间:2023-09-26

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

我几乎有这个:

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

li属性给出错误Cannot call method 'find' of undefined

如何修复?

无论选择器是什么,在声明对象时都不能访问该对象的属性。

为什么要声明ul?您正在opts对象上创建属性ul

丑陋:

你可能想要的是:

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')
}

太可怕了,但你要求它:

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元素,而这里您想要的是事件目标内的元素。)

您的错误消息本质上是说$(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') 
var that = $(this);
var opts = {
    ul: that.find('.carousel'),
    li: ul.find('li')
}