Javascript.RU

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

как привязать метод в качестве обработчика событий
var MyDiv = function()
	{
		this.mdiv;
		this.mx;
		this.mcolor;
	}
	
	function createDiv(conter)
	{
		QallDiv = new Array(3);
		for(i=0;i<3;i++){
			QallDiv[i] = new MyDiv();
			
		}
		QallDiv[0].mcolor="#FF0000";
		QallDiv[1].mcolor="#FF9900";
		QallDiv[2].mcolor="#FFFF00";
		for(i=0;i<3;i++)
		{
			QallDiv[i].mdiv = document.createElement("div");
			QallDiv[i].mdiv = conter.appendChild(QallDiv[i].mdiv);
			QallDiv[i].mdiv.innerHTML="Fuck";
			if(i>0){
			var ii = i-1;
			}
			else
			{
			ii=0
			}
			QallDiv[i].mx = QallDiv[ii].mx+10;
			QallDiv[i].mdiv.style.width = 50 + "px";
			QallDiv[i].mdiv.style.backgroundColor = QallDiv[i].mcolor;
	
		}
		
	return QallDiv;
	}


Как должен выглядеть метод MyDiv (к примеру меняющий цвет фона документа в цвет записанный в переменной mcolor, и как его привязать ко всем экземплярам QallDiv)
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2009, 00:18
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

чтоб вас не загружать ответом, проясните вопрос покороче:

var MyDiv = function()
	{
		this.mdiv;
		this.mx;
		this.mcolor;
	}	
	
	MyDiv.prototype.CHcolor = function(){
		document.body.style.backgroundColor = "#CC9900";
	}
	
	function createDiv(conter)
	{
		QallDiv = new MyDiv();
		QallDiv.mdiv = document.createElement("div");
		QallDiv.mcolor="#FF0000";
		QallDiv.mdiv = conter.appendChild(QallDiv.mdiv);
		QallDiv.mdiv.innerHTML="Fuck";
		QallDiv.mx = 10;
		QallDiv.mdiv.style.width = 50 + "px";
		QallDiv.mdiv.style.backgroundColor = QallDiv.mcolor;
		
		QallDiv.mdiv.addEventListener("click",CHcolor,true); // ??????
		
	
	return QallDiv;
	}


Почему не работает и как будет правильно?

Последний раз редактировалось Степан, 04.12.2009 в 00:37.
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2009, 00:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

QallDiv.mdiv.addEventListener("click", QallDiv.CHcolor, true);
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2009, 00:51
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

Спасибо огромное. заработало.

А на какой объект будет ссылаться this. если ее использовать в методе. и потом метод запускать как обработчик события.

если написать таким образом то после события значение запишется в CHcolor экземпляра?

MyDiv.prototype.CHcolor = function(){
        this.CHcolor  = "Значение";
    }
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2009, 00:59
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Контекст вызова (this) функции QallDiv.CHcolor будет ссылаться на QallDiv.mdiv, если QallDiv.CHcolor сработает по событию click на элементе QallDiv.mdiv.
Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2009, 01:05
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

спасибо за подробный ответ
Ответить с цитированием
  #7 (permalink)  
Старый 05.12.2009, 15:32
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

А как быть с массивом?

var MyDiv = function()
	{
		this.mdiv;
		this.mx;
		this.mcolor;
		this.text;
	}
	
	MyDiv.prototype.CHcolor = function(i){
		document.body.style.backgroundColor = QallDiv[i].mcolor;
	}
	
	function createDiv(conter)
	{	
		var QallDiv = new Array(2);
		for(i=0;i<2;i++){
		QallDiv[i] = new MyDiv();
		}
		
		QallDiv[0].mcolor="#FF0000";
		QallDiv[1].mcolor="#FF9900";
		QallDiv[0].mx = 10;
		QallDiv[1].mx = 60;
		
		for(i=0;i<2;i++){
		QallDiv[i].mdiv = document.createElement("div");
		QallDiv[i].mdiv = conter.appendChild(QallDiv[i].mdiv);
		QallDiv[i].mdiv.style.width = 50 + "px";
		QallDiv[i].mdiv.style.position =  "absolute";
		QallDiv[i].mdiv.style.left = QallDiv[i].mx + "px";
		QallDiv[i].mdiv.style.backgroundColor = QallDiv[i].mcolor;
		QallDiv[i].text = document.createTextNode("FUCK");
		QallDiv[i].text =  QallDiv[i].mdiv.appendChild(QallDiv[i].text);
		QallDiv[i].mdiv.addEventListener("click",QallDiv[i].CHcolor(i),true);	
		}		
		return QallDiv;
	}




document.body.style.backgroundColor = QallDiv[i].mcolor;
и можно както описать этот метод используя this, чтобы не привязываться к конкретному массиву?
Ответить с цитированием
  #8 (permalink)  
Старый 06.12.2009, 19:31
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

ну кто-нибудь ответьте ПЛЗ
Ответить с цитированием
  #9 (permalink)  
Старый 07.12.2009, 22:48
Новичок на форуме
Отправить личное сообщение для Степан Посмотреть профиль Найти все сообщения от Степан
 
Регистрация: 03.12.2009
Сообщений: 7

Сообщение от Octane Посмотреть сообщение
Контекст вызова (this) функции QallDiv.CHcolor будет ссылаться на QallDiv.mdiv, если QallDiv.CHcolor сработает по событию click на элементе QallDiv.mdiv.
в общем таким образом имея ссылку на параметр экземпляра объекта можно получить ссылку на сам экземпляр объекта?

QallDiv[i].mdiv.addEventListener("click",QallDiv[i].CHcolor(i),true); - почему это не работает? В книге пока не могу найти ответ...
Ответить с цитированием
  #10 (permalink)  
Старый 07.12.2009, 23:58
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Сообщение от Степан
в общем таким образом имея ссылку на параметр экземпляра объекта можно получить ссылку на сам экземпляр объекта?
Нет. На один и тот же элемент mdiv может существовать одновременно множество ссылок.

Сообщение от Степан
почему это не работает?
Вы выполняете метод CHcolor, который ничего не возвращает, а точнее возвращает undefined, поэтому ваш код равносилен следующему:
QallDiv[i].mdiv.addEventListener("click", undefined, true);

Воспользуйтесь замыканием для доступа к параметрам.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как привязать слой к слову matana Общие вопросы Javascript 18 28.11.2010 20:59
как привязать ссылку с Html страницы на вынесенный в отдельную папку js скрипт? TIIIMOXAN Общие вопросы Javascript 2 09.11.2009 18:23
Как добавить метод ко всем элементам? zubr80 Events/DOM/Window 3 06.04.2009 04:46
td.attachEvent('onclick', newrowdelete); Как привязать событие с параметром? serge! Events/DOM/Window 4 23.03.2009 17:38
кроссбраузерное добавление обработчика событий элементу krinart Events/DOM/Window 5 30.09.2008 03:38