Javascript.RU

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

Множество событий на одном объекте
Всем привет. Пытаюсь повесить несколько одинаковых обработчиков на один объект.

<html>
<head>
<title></title>
<script>
function j(data) { return new operation(data); }
function operation(data) { 
  this.obj = data;
  this.stackMouseMove = [];
  return this;
}

operation.prototype.bind = function(func) {
	var self = this;
	this.stackMouseMove.push(func);
	if(!this.obj.onmousemove) this.obj.onmousemove = function() { self.mousemove(); };
};

operation.prototype.mousemove = function() {
  for(var i = 0; i <= this.stackMouseMove.length-1; i++) {
    this.stackMouseMove[i]();
  }
};


window.onload = function() { 
  j(document).bind(function() { document.getElementById('q').innerHTML = Math.floor( Math.random() * (10 - 1 + 1) ) + 1; });  
  j(document).bind(function() { document.getElementById('w').innerHTML = Math.floor( Math.random() * (10 - 1 + 1) ) + 1; }); 
};

</script>
	</head>
	<body>
	1. <span id="q">0</span><br>
	2. <span id="w">0</span><br>
	</body>
</html>


Но при каждом вызове j(document).bind(....) возвращается новый operation.
Подскажите, как решить эту проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2012, 14:12
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

ну, наверно так:
var op = j(document);
op.bind();
op.bind();

нет?
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2012, 14:26
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

vasa_c,
так работает, но это не совсем то, что нужно. Нужно что бы вызов методов bind(...) был без всего "лишнего". Т.е. без var op = j(document);
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2012, 15:43
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

а чего лишнего то?
сделайте тогда кэш какой-нибудь в j(), например:

function j(data) { 
    if (!data.__operation) {
        data.__operation = new operation(data);
    }
    return data.__operation;
}
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2012, 15:45
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

(Sandr), может так пойдет

<div id="first">click me</div>

<script>

	var events = {
		'bind': function( elem, eventType, handler ) {
			if ( document.addEventListener ) {
				elem.addEventListener( eventType, handler, false );
			} else {
				elem.attachEvent( 'on' + eventType, handler );
			}
		},
		'unbind': function( elem, eventType, handler ) {
			if ( document.addEventListener ) {
				elem.removeEventListener( eventType, handler, false );
			} else {
				elem.detachEvent( 'on' + eventType, handler );
			}
		}
	};
	
	
	(function() {
	
		events.bind( this, 'click', function() { alert( 1 ); } );
		events.bind( this, 'click', function() { alert( 2 ); } );
		
	}).call( document.getElementById( 'first' ) );
	
</script>
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2012, 22:22
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

vasa_c,
спасибо! Как раз то, что нужно)

nerv_,
спасибо, что также не прошли мимо, но мне больше подойдёт вариант Vasa_c'а.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag'n'drop обработчики событий zaytsewa Общие вопросы Javascript 7 27.06.2011 14:32
Переопределение событий lispik jQuery 4 13.01.2011 12:30
onmouseover и id на одном объекте agert Events/DOM/Window 15 12.01.2011 12:51
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03