JSFiddle - React, Tailwind, and code Playground
HTML
<button class="one">one</button>
<button class="two">two</button>
<button class="all">all</button>
<button class="lla">lla</button>
<button class="bang">BANG</button>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<input class="checkbox" type="checkbox" /> observer (вкл/выкл)
JavaScript
var testModule = (function (){
var observerable = {
listeners : {},
addListener : function(object, evt, callback) {
if ( !this.listeners.hasOwnProperty(evt) ) {
this.listeners[evt] = [];
}
this.listeners[evt].push(object[callback]);
},
removeListener : function(object, evt, callback) {
if ( this.listeners.hasOwnProperty(evt) ) {
var i,length;
for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {
if( this.listeners[evt][i] === object[callback]) {
this.listeners[evt].splice(i, 1);
}
}
}
},
publisher : function(evt, args) {
if ( this.listeners.hasOwnProperty(evt) ) {
var i,length;
for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {
this.listeners[evt][i](args);
}
}
}
};
var one = {
callBackOne : function(e) {
alert("Вызван подписчик ONE: " + e.message);
}
};
var two = {
callBackTwo : function(e) {
alert("Вызван подписчик TWO: " + e.message);
}
};
var three = {
callBackThree : function(e) {
alert("Вызван подписчик Three: " + e.message);
}
};
var bang = {
callBackBang : function(e) {
$('html').css('background', 'red');
console.log('BANG!');
}
};
$('.checkbox').on('click', function(){
if($(this).prop("checked")){
$('.one').on('click', function(){
observerable.publisher("someEventForB", {message : "i am one event"});
});
$('.two').on('click', function(){
observerable.publisher("someEventForA", {message : "i am two event"});
});
$('.all').on('click', function(){
observerable.publisher("someEventForC", {message : "i am two event"});
});
$('.lla').on('click',...