0

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

我几乎是这样的:

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

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

如何修复?

4

3 回答 3

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

于 2013-08-19T20:01:42.800 回答
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') 
于 2013-08-19T20:08:02.123 回答
0
var that = $(this);
var opts = {
    ul: that.find('.carousel'),
    li: ul.find('li')
}
于 2013-08-19T20:18:17.000 回答