Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2009, 20:00
Новичок на форуме
Отправить личное сообщение для Крот Посмотреть профиль Найти все сообщения от Крот
 
Регистрация: 11.11.2009
Сообщений: 5

Как правильно вызвать метод внутри класса?
Привет.

Задача: Есть div c id="uid", при наведении на него мышкой - содержимое div'а должно меняться на "Курсор находится на мне!". Если после этого убрать курсор - содержимое должно меняться на "Вы убрали курсор". Реализовать нужно через "класс", без использования глобальных переменных.

Вроде бы всё сделал, но никак не получается внутри класса забиндить собитие для элемента, которое бы вызывало один из методов класса.

PS: Для биндинга event'ов и операций с DOM - использую jQuery.

<div id="uid">Наведи на меня мышку...</div>

<script>
	function MyClass(el) {

		this.el = el;
		this.privet = "Курсор находится на мне!";
		this.poka = "Вы убрали курсор!";
		
		/* Вот тут я пытаюсь забиндить вызов метода класса на убирание курсора с элемента. */
		this.el.mouseleave(function() {
			this.sayPoka();
		});
		
		this.sayPrivet = function() {
			this.el.html(this.privet);
		}
		
		this.sayPoka = function() {
			this.el.html(this.poka);
		}
		
	}

	$("#uid").mouseenter(function() {
	
		my_class = new MyClass($(this));
		my_class.sayPrivet();
	
	});
</script>


Подскажите пожалуйста как лучше сделать?
Возможно что-то вообще неправильно делаю, не лучшим образом.

Спасибо!

Последний раз редактировалось Octane, 12.11.2009 в 10:39. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2009, 20:01
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Крот
mouseenter
такое точно есть?
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2009, 20:02
Новичок на форуме
Отправить личное сообщение для Крот Посмотреть профиль Найти все сообщения от Крот
 
Регистрация: 11.11.2009
Сообщений: 5

Сообщение от Riim Посмотреть сообщение
такое точно есть?
Это из jQuery
http://docs.jquery.com/Events/mouseenter#fn
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2009, 20:04
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Крот
$("#uid").mouseenter(function() {

my_class = new MyClass($(this));
экземпляр создается много раз - это плохо.
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2009, 20:10
Новичок на форуме
Отправить личное сообщение для Крот Посмотреть профиль Найти все сообщения от Крот
 
Регистрация: 11.11.2009
Сообщений: 5

Сообщение от Riim Посмотреть сообщение
экземпляр создается много раз - это плохо.
А как сделать так, чтобы создавался один экземпляр на каждый элемент?

Т.е. допустим, у меня 10 таких div'ов и на каждый нужно создать экземпляр получается. Один экземпляр не катит, т.к. в реальной задаче каждый экземпляр класса будет отличаться от другого параметрами, которые будут задаваться при создании класса.
Ответить с цитированием
  #6 (permalink)  
Старый 11.11.2009, 20:14
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Нужно 1 экземпляр на 1 элемент, а у вас 1 экземпляр на 1 событие.
Ответить с цитированием
  #7 (permalink)  
Старый 11.11.2009, 23:51
Новичок на форуме
Отправить личное сообщение для Крот Посмотреть профиль Найти все сообщения от Крот
 
Регистрация: 11.11.2009
Сообщений: 5

Сообщение от Riim Посмотреть сообщение
Нужно 1 экземпляр на 1 элемент, а у вас 1 экземпляр на 1 событие.
А как сделать, не подскажешь?
Я никак не пойму как это сделать без глобальных переменных.
Ответить с цитированием
  #8 (permalink)  
Старый 12.11.2009, 07:26
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Примерно так (псевдокод):

var MyClass = function(elem) {
	this.elem = $(elem);
	var self = this;
	Event.add(this.elem, 'mouseover', function() {self.mouseover()});
	Event.add(this.elem, 'mouseout', function() {self.mouseout()});
};

MyClass.prototype.mouseover = function() {
	this.elem.innerHTML = 'over';
};

MyClass.prototype.mouseout = function() {
	this.elem.innerHTML = 'out';
};

$.ready(function() {
	new MyClass('div1');
});
Ответить с цитированием
  #9 (permalink)  
Старый 12.11.2009, 11:50
Новичок на форуме
Отправить личное сообщение для Крот Посмотреть профиль Найти все сообщения от Крот
 
Регистрация: 11.11.2009
Сообщений: 5

Сообщение от Riim Посмотреть сообщение
Примерно так (псевдокод):

Event.add(this.elem, 'mouseover', function() {self.mouseover()});
	Event.add(this.elem, 'mouseout', function() {self.mouseout()});
Странно, а почему тогда в моём примере не работает через self

var self = this;
this.el.mouseleave(function() {
  self.sayPoka();
});


А вообще конечно Спасибо, буду экспериментировать!
Ответить с цитированием
  #10 (permalink)  
Старый 12.11.2009, 12:00
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Крот
Странно, а почему тогда в моём примере не работает через self
что alert выводит:
var self = this;
this.el.mouseleave(function() {
  alert(self);
  alert(self.sayPoka);
  self.sayPoka();
});

?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как применить css ко всем элементам внутри блока MaxB jQuery 12 28.05.2010 07:56
как вызвать функцию название которой находиться в строке dark Общие вопросы Javascript 3 14.10.2009 13:02
как вызвать функцию? pumpurumer jQuery 2 27.08.2009 19:39
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Как правильно оформить Send() Алекс97 AJAX и COMET 20 30.10.2008 19:19