0

我一直在尝试将 $(this) 缓存在名为 $this 的变量中以用于我的 JQuery 代码以提高效率,但是当我尝试在单击处理程序函数中引用 $this 时,它不起作用;但是,使用 $(this) 可以。这是我的代码,没有 $(this) 的缓存版本。

$(function() {
    var listNav = $('.row .listNav'),
        listItem = listNav.find('li'),
                    $this = $(this);

        listItem.click(function() {

            listItem.removeClass('selected');
            $this.addClass('selected');
        });
});

如果我尝试在顶部的变量列表中创建变量,然后在四个单击函数中引用它,它将不起作用。

4

3 回答 3

1

$(this) 在调用时从上下文创建一个 jQuery 对象。this根据触发的单击处理程序进行更改,因此将其缓存在代码顶部不会给您想要的结果。

如果您需要在处理程序中访问$(this)不止一次或两次,请将其缓存在处理程序中。

$this = $(this);  // won't work because 'this' is different in the handler.

    bullet.click(function() {
        var $this = $(this);    // Will work as it's defined in the right context
        var bulletStr = $this.text(),
            bulletNum = parseInt(bulletStr),
            bulletMargin = slideWidth * bulletNum;

        bullet.removeClass('active');
        $this.addClass('active');
        current = bulletNum;
        if(current >= lastSlide) {
            nextBtn.hide();
        }
        else if(current < lastSlide) {
            nextBtn.show();
        }
        if(current > 0) {
            prevBtn.show();
        }
        else {
            prevBtn.hide();
        }
        sliderInner.animate({marginLeft: -bulletMargin}, 300, "easeInOutQuad");
        listItem.removeClass('selected');
        listItem.eq(bulletNum).addClass('selected');
    });
于 2013-07-04T02:39:09.983 回答
0

你如何初始化它?如果你做类似的事情

$这个 = $(这个);

它必须不起作用,因为列表this中包含您的功能范围,但不包含最终clicks范围

你做类似的事情

var that; // - without initing it

然后做

but.click = function(){
    that = $(this);
}
于 2013-07-04T02:40:24.013 回答
-2

尝试使用

listItem.click(function(data)

代替

listItem.click(function()
于 2013-07-04T02:36:41.323 回答