$(this) and this inside click-event

微笑、不失礼 提交于 2019-12-01 23:29:32

问题


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.

http://jsfiddle.net/j33Fx/2/

var myclass = function(){

    this.myfunction = function(){
        alert('myfunction');
    }

    this.buttonclicked = function(){
        alert('buttonclicked');
    }

    this.writeout = function(){
        var buttoncode = '<button class="mybutton">click</button>';
        $('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?


回答1:


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 = '<button class="mybutton">click</button>';
    $('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();
}

Updated Fiddle



来源:https://stackoverflow.com/questions/24736599/this-and-this-inside-click-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!