i have an own js-class and try to use jquery's $(this) and object-this in an click-event.
jquery's $(this) works fine, but the object-this is not defined.
var myclass = function(){
this.myfunction = function(){
alert('myfunction');
}
this.buttonclicked = function(){
alert('buttonclicked');
}
this.writeout = function(){
var buttoncode = 'click';
$('body').append(buttoncode);
$('.mybutton').click(function(){
alert('Button: '+$(this).attr('class'));
this.buttonclicked();
});
this.myfunction();
}
}
var x = new myclass();
x.writeout();
When i click the appended button, i get an alert with the classname of the Button, but my function "this.buttonclicked" seems not to be a function.
Any ideas?
解决方案
this refers to element which invoked the event in the event handler. You can cache current object in some other variable. Which can be used latter.
use
this.writeout = function(){
var buttoncode = 'click';
$('body').append(buttoncode);
var _self = this; //cache current object
$('.mybutton').click(function(){
alert('Button: '+ $(this).attr('class')); //Here this refers to element which invoked the event.
_self.buttonclicked(); //Use cached object
});
this.myfunction();
}