Javascript 无法调用方法';查找';未定义的
我正在尝试使用jQuery代码中的对象 我几乎做到了这一点: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')
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')
}