Javascript.RU

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

Все теже events
вот туплю....

есть массив, который я передаю как параметр в конструктор объекта.

buttons : {
   "Ok" : function(){
        console.log("Ok");
	this.action();
   },
  "Cancel" : function(){
	console.log("Cancel");
	this.action();
   }
}


в объекте есть функция:

this.action = function(){
					events.beforeAction(self);
					console.log("action");
					events.afterAction(self);
				}


в объекте , есть кусок кода, который создает кнопки, в данном случае 2

for (i in buttons) {
								
	var bName = i;
	var bClick = buttons[i];
								
	var b = document.createElement("button");
	b.textContent = bName;
					
	b.addEventListener('click', function(){bClick.call(self)}, false);
								
	/*b.onclick = function(event){
		return bClick.call(self);
	}*/
								
	//b.onclick = bClick;
								
								            document.body.appendChild(b);
}


так вот. Для баттанов добавляется всегда последний переданный в массиве метод. Ткните лицом, где туплю.
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2014, 18:04
Новичок на форуме
Отправить личное сообщение для syul Посмотреть профиль Найти все сообщения от syul
 
Регистрация: 02.04.2014
Сообщений: 3

да.... забыл сказать
b.onclick = bClick;

работает как надо. Но она не передает this. А мне он оч. нужен.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2014, 18:08
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от syul
Ткните лицом, где туплю
Не расстраивайся, с этим тупит почти каждый по началу. Прочитай про замыкания. Заметь, что в JavaScript переменные внутри блоков (for, while if и тд) на самом деле объявляются на уровне функции, а не блока, как допустим в C# или Java. И получается что в цикле переменная создается единожды, а не на каждой итерации.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2014, 18:16
Новичок на форуме
Отправить личное сообщение для syul Посмотреть профиль Найти все сообщения от syul
 
Регистрация: 02.04.2014
Сообщений: 3

спасибо... .разобрался.... вопрос снят
Ответить с цитированием
  #5 (permalink)  
Старый 03.04.2014, 15:00
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от syul
b.addEventListener('click', function(){bClick.call(self)}, false);
Зачем безымянная и к чему self?

Насчет "блоков" и "замыканий" тоже не понял. Вот каноничный кот:
var elems = obj.getElementsByTagName('img');

		images = [];
		
		for(var i=0; i<elems.length; i++) {
			var elem = elems[i].parentNode;
			if(elem && elem.nodeName == 'A') {
				elem.index = images_length;
				elem.addEventListener("click", load_image, false);
				images[images_length++] = elem;
			}
		}


Развешивается и щелкает как доктор прописал.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.animate() - все просто но все такие не работает.. uExpo Общие вопросы Javascript 5 14.08.2011 01:52
... и все же, как прогнать в цикле? Ankh Ваши сайты и скрипты 12 21.07.2011 09:36
<pre> и contentEditable все сыты кроме IE ntro123 Internet Explorer 1 02.06.2011 17:15
OneShowHide.js jQuery раскрываются сразу все списки вместо одного Yatsenco Элементы интерфейса 3 10.09.2010 15:13
Events. addEventListener. KBEPT Events/DOM/Window 2 06.09.2010 20:38