Pwnna
Pwnna

Reputation: 9528

jQuery access parent object attribute?

So I have this code:

function theObject(){
    this.someelement = $("#someelement");
    this.someotherelement = $("someotherelement");
    this.someelement.fadeOut(500, function(){
       this.someotherelement.attr("title", "something");
       this.someelement.fadeIn(500); 
    });
}

for some reason this.someotherelement is undefined. I'm guessing because it's wrapped in a function(){}?

Upvotes: 0

Views: 588

Answers (4)

DavidT
DavidT

Reputation: 306

is someotherelement an ID? If so, you are missing a #...

this.someotherelement = $("#someotherelement");

Upvotes: 0

Ahmed Aman
Ahmed Aman

Reputation: 2393

I have edited your code , I hope it helps.

function theObject(){
    var someelement = $("#someelement");
    var someotherelement = $("#someotherelement");
    someelement.fadeOut(500, function(){
       someotherelement.attr("title", "something");
       someelement.fadeIn(500); 
    });
}

Upvotes: 0

Hooray Im Helping
Hooray Im Helping

Reputation: 5264

This is caused by a JavaScript scoping issue. Creating a function creates a new scope for this which makes this refer to the function. You can fix it by doing ... this:

function theObject(){
  this.someelement = $("#someelement");
  this.someotherelement = $("someotherelement");

  // bind this to that (what?). This way, this will still be accessible inside
  // the new function's scope as that
  var that = this;
  this.someelement.fadeOut(500, function(){
    that.someotherelement.attr("title", "something");
    that.someelement.fadeIn(500); 
  });
}

Upvotes: 1

Darin Dimitrov
Darin Dimitrov

Reputation: 1038710

Inside the function this means something else. You could capture it though:

this.someotherelement = $("someotherelement");
var _this = this;
this.someelement.fadeOut(500, function(){
   _this.someotherelement.attr("title", "something");
   _this.someelement.fadeIn(500); 
});

Upvotes: 3

Related Questions