Множество событий на одном объекте
Всем привет. Пытаюсь повесить несколько одинаковых обработчиков на один объект.
<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, время: 20:44. |