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

Javascript 无法调用方法';查找';未定义的,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试使用jQuery代码中的对象 我几乎做到了这一点: var opts = { ul: $(this).find('.carousel'), li: ul.find('li') } li属性给出错误无法调用未定义的方法“find” 如何修复它?无论您的选择器是什么,您都不能在声明对象时访问该对象的属性 为什么要宣布ul?您正在对opts对象创建属性ul 丑陋的: 您可能想要的是: var opts = { ul: $(this).find('.carousel')

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

我几乎做到了这一点:

var opts = {
  ul: $(this).find('.carousel'),
  li: ul.find('li')
}
li
属性给出错误
无法调用未定义的方法“find”


如何修复它?

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

为什么要宣布
ul
?您正在对
opts
对象创建属性
ul

丑陋的: 您可能想要的是:

var opts = {
    ul: $(this).find('.carousel')    
}
opts.li = opts.ul.find('li');
但如果您实际上不需要引用这两个组,那么:

清洁剂: 也一样好

最干净的: 你也可以这样做:

var $carousel = $(this).find('.carousel');
var options = {
    carousel: $carousel,
    carouselItems: $carousel.find('li')
}
糟透了,但你自找的: 阿尔索
(请注意您的
this
是什么,可能您在页面上有多个
.carousel
元素,这里您想要的是事件目标中的元素。)

您的错误消息本质上是说
$(this)
未定义(或者换句话说,jQuery找不到该元素)。因为除了试图设置的单个对象之外,您没有任何代码,所以我不知道
this
的实际值是多少

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

$('#id').click(function() { 
    this === document.getElementById('id');  // true
});`
或者您可以直接删除
$(this)


你是不是错过了一个#或。在选择(
$(this.find('carousel'),
)中,是否确实加载了jquery?您确定这是定义的吗?您确定其中嵌套了一个html元素,该元素与旋转木马选择器匹配吗?那么,如何修复它呢?$(this)。find('.carousel li')存储
$(this)的结果。find('.carousel')
位于
var opts
之外。然后在声明
opts
cleansest
绝对是处理此类实例的方法时使用它。@Steve在这种情况下,您不想,我重复一遍,不想这样做!除非您将拥有大量的
CarouselOptions
实例,但即使如此,尝试将JavaScript强制为OOP通常也不是一个好主意。构造函数的原型包含已设置的函数和属性(并且可以在该构造函数的所有实例上修改),因此您可以像
opts.myOptionsFunction
一样访问它,但它会查找原型链以找到它。如果更改该功能,它将更改所有其他
旋转木马选项
。我强烈建议你选择“最干净”的方式。事实上,我想我在这种情况下是在胡说八道。你确定吗@Henonnomnomnominal表示,按以下方式它将不起作用。请尝试这种方式。设置后,您可以参考opts.ul。由于设置了
this
的方式,因此无法以这种方式工作。出于某种原因,我认为我在那里的一个函数中,
这个
将被设置为对象范围(在本例中不是这样)。错误不在于
这个
而是在于
ul
。另外,
$('.carousel')
$(这个)更一般。查找('.carousel')
,可能不是他想要的。@Steve抱歉,我误解了上下文:)
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'));
$('#id').click(function() { 
    this === document.getElementById('id');  // true
});`
var opts = {};
opts.ul = $('.carousel'),
opts.li = opts.ul.find('li') 
var that = $(this);
var opts = {
    ul: that.find('.carousel'),
    li: ul.find('li')
}