将$this传递到函数中

Passing through $this into function

本文关键字:函数 this      更新时间:2024-06-20

我正试图传递对用户选择的项目的引用(以便在其上运行适当的Javascript效果),但它似乎不起作用。起初是这样,但当我重构代码以使其更易于阅读时,它停止了。我认为这是我使用的逻辑的问题,有人能告诉我如何纠正吗?

新代码-不起作用,但更易于阅读

$('.timeline-item').click(function() {
    expandTimelineDetail( $(this));
});
function expandTimelineDetail($obj) {
     // UI effect
     $obj = $(this).css("background-color", "#F5F5F5");
     setTimeout(function () {
         $obj.css("background-color", "#FFFFFF");
     }, 250);
     // Make timeline item active
     $obj.addClass("active-item");
     $obj.next().addClass("active-item").css('display', 'block');
     // Hide the rest of the timeline items that are not active
     $('#timeline > :not(.active-item)').hide();
     $('#leftspan').css('visibility', 'visible');
     $('.search-container').css('display', 'none');
     // Hide relative departure time, show actual departure time
     $('.actual-time').css('display', 'inline');
     $('.leaving-time').css('display', 'none');
}

旧代码-工作良好但难以阅读

$('.timeline-item').click(function() {
        var $this = $(this).css("background-color","#F5F5F5");
        setTimeout(function() {
            $this.css("background-color","#FFFFFF");
        }, 250);
        $(this).addClass("active-item");
        $(this).next().addClass("active-item").css('display','block');
        $('#timeline > :not(.active-item)').hide();
        $('#leftspan').css('visibility','visible');
        $('.search-container').css('display','none');
        $('.actual-time').css('display','inline');
        $('.leaving-time').css('display','none');
});

$(this)传递给函数,在函数中为$obj参数分配另一个值。

您可以将this绑定到函数:

expandTimelineDetail.bind(this);

在哪里您可以像之前一样访问this

或者只是不重新分配$obj变量。