Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2013, 17:35
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Событие внутри функции или объекта
Доброго времени.
Не могу найти пример, как вызвать метод функции (объекта) из события внутри него. Если я неправильно делаю, поправьте меня плиз!

function obj(el) {

		this.block = el
		this.test = 'lalala'
		
		this.block.on('click',function(e){
			alert(this.test); // Проблемы вот тут!
		})
}
var el1 = new obj($('#el1'));
var el2 = new obj($('#el2'));
Ответить с цитированием
  #2 (permalink)  
Старый 27.06.2013, 17:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от shaltay Посмотреть сообщение
Доброго времени.
Не могу найти пример, как вызвать метод функции (объекта) из события внутри него. Если я неправильно делаю, поправьте меня плиз!

function obj(el) {

		this.block = el
		this.test = 'lalala'
		
		this.block.on('click',function(e){
			alert(this.test); // Проблемы вот тут!
		})
}
var el1 = new obj($('#el1'));
var el2 = new obj($('#el2'));

не "объекта", а "в jQuery"

метод называется trigger



извиняюсь, мимо кассы.

решений несколько:
  1. запомнить контекст в замыкании. Запускаемый пример тут : http://jsbin.com/iyaqup/1
    function obj(el) {
    
    		this.block = el
    		this.test = 'lalala'
    
    		var self = this; // MAGIC!!!
    
    		this.block.on('click',function(e){
    			// alert(this.test); // Проблемы вот тут!
    			// Проблема решена. вместо this используем self.
    			alert(self.test);
    		})
    }
    var el1 = new obj($('#el1'));
    var el2 = new obj($('#el2'));
    

  2. запомнить контекст без создания замыкания (это лучше, чем с созданием замыкания). для этого передаём параметр data. Для переваривания обратитесь к документации метода on

    Запускаемый пример здесь : http://jsbin.com/abepop/1

    function obj(el) {
    
    		this.block = el
    		this.test = 'lalala'
    
    		this.block.on('click', this  /* <--- параметр data */, function(e){
    			// alert(this.test); // Проблемы вот тут!
    			// Проблема решена. вместо this используем Event.data
    			alert(e.data.test);
    		})
    }
    var el1 = new obj($('#el1'));
    var el2 = new obj($('#el2'));
    



Последний раз редактировалось melky, 27.06.2013 в 17:54.
Ответить с цитированием
  #3 (permalink)  
Старый 27.06.2013, 18:05
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

О первом варианте я думал, но кажется как-то костыльно. Второй вариант понравился, работает, оставлю его.
Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по отбору элемента внутри функции TarasSt jQuery 5 12.02.2013 15:57
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35
Статья о JavaScript Plest Оффтопик 17 12.11.2009 12:24
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00