我试图通过对用户选择的项目的引用(以便可以在其上运行相应的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');
});
答案 0 :(得分:1)
您正在将$(this)
传递给您为$obj
参数指定其他值的函数。
您可以将this
绑定到函数:
expandTimelineDetail.bind(this);
您可以像以前一样访问this
或者只是不要重新分配$obj
变量。