this.offset is not a function within a click function
Replace these two lines:
var topx = _this.offset().top;
var leftx = _this.offset().left;
with:
var topx = _this.offsetTop;
var leftx = _this.offsetLeft;
As .offset()
is a jquery function and _this
is a DOM element.
Also for your .css
line you have to wrap _this
in $(...)
again because _this
is a DOM element and **not a jQuery object.
this
(and hence _this
) inside your event handler refers to a DOMElement which doesn't have the offset()
method as that's part of jQuery. To fix this you can create a jQuery object using $(this)
:
$('.item').click(function(e) {
var $this = $(this);
var topx = $this.offset().top;
var leftx = $this.offset().left;
var moveArea = $('#replace').offset().top;
var moveLeft = $('#replace').offset().left;
var moveUp = topx - moveArea - 50;
$this.css({
'position': 'absolute',
'top': moveUp,
'zIndex': 50,
'left': leftx
}).animate({
top: -50,
left: moveLeft
}, 300)
});
Also note the use of the object provided to a single css()
call over multiple calls to the same method.