From dfb35442975a95c91f6c28188fad021714d7098b Mon Sep 17 00:00:00 2001 From: Jay Merrifield Date: Fri, 12 Nov 2010 08:16:41 -0500 Subject: [PATCH] Dialog: Make sure the overlay instance still exists before trying to remove it. Fixes #6645 - Dialog: Missing element not found check in overlay code. --- tests/unit/dialog/dialog_tickets.js | 12 +++++++++++- ui/jquery.ui.dialog.js | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js index f7b590b53..b9bf2f972 100644 --- a/tests/unit/dialog/dialog_tickets.js +++ b/tests/unit/dialog/dialog_tickets.js @@ -76,6 +76,16 @@ test("#6137: dialog('open') causes form elements to reset on IE7", function() { equal($('input:checked').val(), 'b', "checkbox b is checked"); d1.add(d2).remove(); -}) +}); + +test("#6645: Missing element not found check in overlay", function(){ + expect(2); + d1 = $('
Dialog 1
').dialog({modal: true}); + d2 = $('
Dialog 2
').dialog({modal: true, close: function(){ d2.remove()}}); + equals($.ui.dialog.overlay.instances.length, 2, 'two overlays created'); + d2.dialog('close'); + equals($.ui.dialog.overlay.instances.length, 1, 'one overlay remains after closing the 2nd overlay'); + d1.add(d2).remove(); +}); })(jQuery); diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 3d38df4c0..efc445693 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -750,7 +750,10 @@ $.extend($.ui.dialog.overlay, { }, destroy: function($el) { - this.oldInstances.push(this.instances.splice($.inArray($el, this.instances), 1)[0]); + var indexOf = $.inArray($el, this.instances); + if (indexOf != -1){ + this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + } if (this.instances.length === 0) { $([document, window]).unbind('.dialog-overlay'); -- 2.39.5