Множество событий на одном объекте
Всем привет. Пытаюсь повесить несколько одинаковых обработчиков на один объект.
<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. Подскажите, как решить эту проблему? |
ну, наверно так:
var op = j(document); op.bind(); op.bind(); нет? |
vasa_c,
так работает, но это не совсем то, что нужно. Нужно что бы вызов методов bind(...) был без всего "лишнего". Т.е. без var op = j(document); |
а чего лишнего то?
сделайте тогда кэш какой-нибудь в j(), например: function j(data) { if (!data.__operation) { data.__operation = new operation(data); } return data.__operation; } |
(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> |
vasa_c,
спасибо! Как раз то, что нужно) nerv_, спасибо, что также не прошли мимо, но мне больше подойдёт вариант Vasa_c'а. |
Часовой пояс GMT +3, время: 14:12. |