|
106 | 106 | var prepareLink = function (el, options) {
|
107 | 107 | options.id = getAttribute(el, 'data-id');
|
108 | 108 | if (options.id) {
|
| 109 | + removeEventListener(el, 'click'); |
109 | 110 | addEventListener(el, 'click', options);
|
110 | 111 | }
|
111 | 112 | };
|
|
135 | 136 | return getAttribute(share, 'data-desc') || (metaDesc && getAttribute(metaDesc, 'content')) || ' ';
|
136 | 137 | };
|
137 | 138 |
|
| 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 | + |
138 | 167 | /**
|
139 | 168 | * Method for attaching event to the element
|
140 | 169 | * @param {HTMLElement} el
|
|
145 | 174 | var handler = function () {
|
146 | 175 | share(opt.id, opt.url, opt.title, opt.desc);
|
147 | 176 | };
|
| 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; |
148 | 189 |
|
149 | 190 | if (el.addEventListener) {
|
150 | 191 | el.addEventListener(eventName, handler);
|
151 | 192 | } else {
|
152 |
| - el.attachEvent('on' + eventName, function () { |
153 |
| - handler.call(el); |
154 |
| - }); |
| 193 | + el.attachEvent('on' + eventName, iehandler); |
155 | 194 | }
|
156 | 195 | };
|
157 | 196 |
|
|
0 commit comments