diff --git a/backbone.js b/backbone.js
index <HASH>..<HASH> 100644
--- a/backbone.js
+++ b/backbone.js
@@ -1138,6 +1138,7 @@
     // Change the view's element (`this.el` property), including event
     // re-delegation.
     setElement: function(element, delegate) {
+      if (this.$el) this.undelegateEvents();
       this.$el = (element instanceof $) ? element : $(element);
       this.el = this.$el[0];
       if (delegate !== false) this.delegateEvents();
diff --git a/test/view.js b/test/view.js
index <HASH>..<HASH> 100644
--- a/test/view.js
+++ b/test/view.js
@@ -186,4 +186,16 @@ $(document).ready(function() {
     ok(view.$el === $el);
   });
 
+  test("#986 - Undelegate before changing element.", 1, function() {
+    var a = $('<button></button>');
+    var b = $('<button></button>');
+    var View = Backbone.View.extend({
+      events: {click: function(e) { ok(view.el === e.target); }}
+    });
+    var view = new View({el: a});
+    view.setElement(b);
+    a.trigger('click');
+    b.trigger('click');
+  });
+
 });
Fix #<I> - Undelegate events before changing `el`.