diff options
author | wout <wout@impinc.co.uk> | 2014-09-03 15:24:24 +0200 |
---|---|---|
committer | wout <wout@impinc.co.uk> | 2014-09-03 15:24:24 +0200 |
commit | 17e15d57d8eb2cb20cc72abcf1bd5bb1bbd39e49 (patch) | |
tree | d06f213fdf3eb52d35b3f8069dc4f6733795fa3d /src/event.js | |
parent | 69da2d385450daa158d75ebe59449cc044ec8022 (diff) | |
download | svg.js-17e15d57d8eb2cb20cc72abcf1bd5bb1bbd39e49.tar.gz svg.js-17e15d57d8eb2cb20cc72abcf1bd5bb1bbd39e49.zip |
Fixed bug in event detaching
Diffstat (limited to 'src/event.js')
-rwxr-xr-x | src/event.js | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/event.js b/src/event.js index 3f7e656..2855afa 100755 --- a/src/event.js +++ b/src/event.js @@ -42,11 +42,12 @@ SVG.on = function(node, event, listener) { // create listener var l = listener.bind(node.instance || node) - // ensure node reference - SVG.listeners[node] = SVG.listeners[node] || {} + // ensure reference objects + SVG.listeners[node] = SVG.listeners[node] || {} + SVG.listeners[node][event] = SVG.listeners[node][event] || {} // reference listener - SVG.listeners[node][listener] = l + SVG.listeners[node][event][listener] = l // add listener node.addEventListener(event, l, false) @@ -54,11 +55,33 @@ SVG.on = function(node, event, listener) { // Add event unbinder in the SVG namespace SVG.off = function(node, event, listener) { - // remove listener - node.removeEventListener(event, SVG.listeners[node][listener], false) + if (listener) { + // remove listener reference + if (SVG.listeners[node] && SVG.listeners[node][event]) { + // remove listener + node.removeEventListener(event, SVG.listeners[node][event][listener], false) - // remove listener reference - delete SVG.listeners[node][listener] + delete SVG.listeners[node][event][listener] + } + + } else if (event) { + // remove all listeners for the event + if (SVG.listeners[node][event]) { + for (listener in SVG.listeners[node][event]) + SVG.off(node, event, listener) + + delete SVG.listeners[node][event] + } + + } else { + // remove all listeners on a given node + if (SVG.listeners[node]) { + for (event in SVG.listeners[node]) + SVG.off(node, event) + + delete SVG.listeners[node] + } + } } // |