Skip to content

Commit fd020b4

Browse files
authored
fix listeners re-adding with share buttons update (2) (#30)
1 parent aa6c669 commit fd020b4

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

src/share-buttons.js

+42-3
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
var prepareLink = function (el, options) {
107107
options.id = getAttribute(el, 'data-id');
108108
if (options.id) {
109+
removeEventListener(el, 'click');
109110
addEventListener(el, 'click', options);
110111
}
111112
};
@@ -135,6 +136,34 @@
135136
return getAttribute(share, 'data-desc') || (metaDesc && getAttribute(metaDesc, 'content')) || ' ';
136137
};
137138

139+
/**
140+
* Counter for generated cache's share button's index.
141+
* This to reference added share buttons' listeners.
142+
*/
143+
var refCounter = 0
144+
/**
145+
* List of added listeners' for share buttons.
146+
* This to index listeners' for update or removal purpose.
147+
*/
148+
var listenersCache = {}
149+
150+
/**
151+
* Method for detaching event to the element
152+
* @param {HTMLElement} el
153+
* @param {string} eventName
154+
*/
155+
var removeEventListener = function (el, eventName) {
156+
var cachedRef = el.getAttribute('data-sharebtn-ref');
157+
158+
if (cachedRef) {
159+
if (el.removeEventListener) {
160+
el.removeEventListener(eventName, listenersCache[cachedRef]);
161+
} else {
162+
el.detachEvent('on' + eventName, listenersCache[cachedRef+'ie']);
163+
}
164+
}
165+
};
166+
138167
/**
139168
* Method for attaching event to the element
140169
* @param {HTMLElement} el
@@ -145,13 +174,23 @@
145174
var handler = function () {
146175
share(opt.id, opt.url, opt.title, opt.desc);
147176
};
177+
var iehandler = function () {
178+
handler.call(el);
179+
};
180+
var cachedRef = el.getAttribute('data-sharebtn-ref');
181+
182+
if (!cachedRef) {
183+
cachedRef = ++refCounter;
184+
el.setAttribute('data-sharebtn-ref', cachedRef);
185+
}
186+
187+
listenersCache[cachedRef] = handler;
188+
listenersCache[cachedRef+'ie'] = iehandler;
148189

149190
if (el.addEventListener) {
150191
el.addEventListener(eventName, handler);
151192
} else {
152-
el.attachEvent('on' + eventName, function () {
153-
handler.call(el);
154-
});
193+
el.attachEvent('on' + eventName, iehandler);
155194
}
156195
};
157196

0 commit comments

Comments
 (0)