将$ this传递给函数

时间:2015-02-27 19:55:33

标签: javascript jquery

我试图通过对用户选择的项目的引用(以便可以在其上运行相应的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');
});

1 个答案:

答案 0 :(得分:1)

您正在将$(this)传递给您为$obj参数指定其他值的函数。

您可以将this绑定到函数:

expandTimelineDetail.bind(this);

您可以像以前一样访问this

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