Javascript.RU

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

Можно ли получить имя экземпляра объекта внутри самого объекта?
Я создал свой класс, который создает DIV и IFRAME, в общем имитация всплывающего окна. Хотелось бы сделать так, чтобы на этом всплывающем окне при создании его, добавлялась кнопка(ну или сссылка) для закрытия этого окна.
Тоесть у объекта есть метод close(), который его закрывает. Все методы у меня работают, окно создается и сама функция close() тоже работает верно, вопрос не как их реализовать, а как сделать так, чтобы кнопка или ссылка, по клику на которой добавлялась именно в функции создания "окна", т.к this.close() тут не прокатит, а надо вызывать метод из конкретного экземпляра объекта. МОжно ли как либо внутри класса получить имя экземпляра объекта?

create()
{
//......
//создается DIV и IFRAME
//.......

//а здесь добавим ссылку, по которой окно должно закрыться
var tmp = this.div.innerHTML;
this.div.innerHTML = "<a onclick=close()>Закрыть[X]</a>" + tmp;
}


в приведенном мною псевдокоде видим onclick=close(). Но тут будет ошибка, т.к close() - это метод объекта. this.close() тут тоже не сделаешь. Пока что мне приходит в голову только после создания экземпляра объекта передавать этому экземпляру его имя как строку както так:

create(instName)
{
......

var tmp = this.div.innerHTML;
this.div.innerHTML = "<a onclick=" + instName + ".close()>Закрыть[X]</a>" + tmp;
}

но хотелось бы чтобы при использовании класса не надо было заботиться о том чтобы передавать имя объекта, а как то получить его внутри метода create().

Или, возможно есть какое то другое решение данной проблемы? Буду признателен за любую помощь
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2008, 00:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Один из вариантов
create() {
  var self = this;
  // ...
  var a = document.createElement('A');
  a.onclick = function() {
    self.close();
  }
  // ...
}
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2008, 00:46
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

Kolyaj,
Firebug пишет:
self.close is not a function
Ответить с цитированием
  #4 (permalink)  
Старый 14.11.2008, 08:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Весь код покажите.
Ответить с цитированием
  #5 (permalink)  
Старый 14.11.2008, 18:17
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

ModalWindow = function()
{
	var div, transpDiv;
	var isShowed;
	var iframe;
	var frmBody;
	var self;
	
	this.isShowed = false;
}

ModalWindow.prototype =
{
	createDiv: function(width,height,content)
	{   
		if(!this.isShowed)
		{
			var bodyWidth, bodyHeight; 
			if (self.innerHeight)
			{ // all except Explorer 
			   bodyWidth = self.innerWidth; 
			   bodyHeight = self.innerHeight; 
			} 
			else if (document.documentElement && document.documentElement.clientHeight) 
			{
			   // Explorer 6 Strict Mode 		 
			   bodyWidth = document.documentElement.clientWidth; 
			   bodyHeight = document.documentElement.clientHeight; 
			}
			else if (document.body)
			{// other Explorers 		 
			   bodyWidth = document.body.clientWidth; 
			   bodyHeight = document.body.clientHeight; 
			} 

			this.div = document.createElement('DIV'); 
			this.div. className = "ModalBox";
			this.div.style.left = (bodyWidth/2)-(width/2) + 'px';
			this.div.style.top  = '100px';
			this.div.style.width = width;
			document.body.appendChild(this.div);
			this.self = this;
			var a;
			a = document.createElement('A');
			a.innerHTML = "Закрыть[X]";
			this.div.appendChild(a);
			a.onclick = function()
			{
				self.closeMessage();
			}
			
			this.iframe = document.createElement('iframe');
			this.iframe.src = content;
			this.iframe.frameBorder = "no";	
			this.iframe.scrolling = "no";
			this.iframe.style.height = height + 'px';
			this.iframe.style.width  = width  + 'px';
			this.div.appendChild(this.iframe);
					

			this.transpDiv = document.createElement('DIV');
			this.transpDiv.className = "transparentLayer";
			this.transpDiv.style.left = "0px";
			this.transpDiv.style.top  = "0px";
			this.transpDiv.style.width = '100%';
			this.transpDiv.style.height = '100%';
			document.body.appendChild(this.transpDiv);
			
			isShowed = true;
		}

	}
,
	closeMessage: function()
	{
	this.div.style.display='none';
	this.transpDiv.style.display='none';
	this.isShowed = false;
	}
}
Ответить с цитированием
  #6 (permalink)  
Старый 14.11.2008, 18:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Ichigeki
if (self.innerHeight)
Это что?

Сообщение от Ichigeki
a.onclick = function() { self.closeMessage(); }
self-то где инициализируется?
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2008, 18:24
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

Сообщение от Kolyaj Посмотреть сообщение
Это что?


self-то где инициализируется?
несколькими строчками выше

this.self = this;


или тут чтото неверно?

этот кусок кода:
var bodyWidth, bodyHeight; 
			if (self.innerHeight)
			{ // all except Explorer 
			   bodyWidth = self.innerWidth; 
			   bodyHeight = self.innerHeight; 
			} 
			else if (document.documentElement && document.documentElement.clientHeight) 
			{
			   // Explorer 6 Strict Mode 		 
			   bodyWidth = document.documentElement.clientWidth; 
			   bodyHeight = document.documentElement.clientHeight; 
			}
			else if (document.body)
			{// other Explorers 		 
			   bodyWidth = document.body.clientWidth; 
			   bodyHeight = document.body.clientHeight; 
			}


вообще убрал - результат такой же

Последний раз редактировалось Ichigeki, 14.11.2008 в 18:33.
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2008, 18:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вам нужно сохранить this, а вы сохраняете его в него же. Просто var self = this;
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2008, 18:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

http://javascript.ru/tutorial/object/thiskeyword
Ответить с цитированием
  #10 (permalink)  
Старый 14.11.2008, 19:00
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

спасибо, теперь все получилось!!
Ответить с цитированием
Ответ



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

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