Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как по событию вызвать метод определенного экземпляра объекта (https://javascript.ru/forum/jquery/6813-kak-po-sobytiyu-vyzvat-metod-opredelennogo-ehkzemplyara-obekta.html)

jvs 24.12.2009 14:43

Как по событию вызвать метод определенного экземпляра объекта
 
Нужно чтобы при создании экземпляра объекта в него передавался id элемента и по клику по этому элементу вызывался метод экземпляра объекта, который это событие создал. Подскажите пожалуйста как правильно это написать.
Ошибка явно в "this.Result()" так как this для него получается сам объект по которому производится клик, а не метод экземпляра объекта.
function btn(id) {
this.id = id;
this.Result = function(){
alert("id="+this.id);
}
this.Events = function(){
jQuery("#"+this.id).click(function () {
this.Result();
});
}
}
var objBtn = new btn("button1");
objBtn.Events();

subzey 24.12.2009 15:03

this переопределяется при вызове функции jQuery. Попробуйте использовать замыкания, как-то так:
function btn(id) {
this.id = id;
this.Result = function(){
alert("id="+this.id);
}
var me = this;
this.Events = function(){
jQuery("#"+this.id).click(function () {
me.Result();
});
}
}
var objBtn = new btn("button1");
objBtn.Events();

jvs 24.12.2009 15:08

Спасибо большое, то что нужно! :)

x-yuri 24.12.2009 16:04

ну только переписал бы я этот код как-нибудь так (как минимум вынес бы метод в прототип)
function Btn( id ) {
    this._id = id;
    var onclick = bind( this.result, this );
    $('#'+id).click( onclick );
}

Btn.prototype.result = function() {
    alert( "id="+this._id );
}

function bind( f, o ) {
    return function() {
        f.apply( o, arguments );
    }
}

var btn = new Btn('button1');

p.s. jvs оформляй код нормально... и учись писать его так, чтобы было понятно, что там происходит


Часовой пояс GMT +3, время: 19:04.