diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 7896c2c969583f863a9aea96b693761934923d46..c0c6284852e67e3a8935f78c97c1dbcc54152158 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -775,4 +775,65 @@ $(function () { $circle.bootstrapTooltip('show') }) + test('should not reload the tooltip on subsequent mouseenter events', function () { + var titleHtml = function () { + var uid = $.fn.bootstrapTooltip.Constructor.prototype.getUID('tooltip') + return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>' + } + + var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>') + .appendTo('#qunit-fixture') + + $tooltip.bootstrapTooltip({ + html: true, + animation: false, + trigger: 'hover', + delay: { show: 0, hide: 500 }, + container: $tooltip, + title: titleHtml + }) + + $('#tt-outer').trigger('mouseenter') + + var currentUid = $('#tt-content').text() + + $('#tt-content').trigger('mouseenter') + equal(currentUid, $('#tt-content').text()) + }) + + test('should not reload the tooltip if the mouse leaves and re-enters before hiding', function () { + var titleHtml = function () { + var uid = $.fn.bootstrapTooltip.Constructor.prototype.getUID('tooltip') + return '<p id="tt-content">' + uid + '</p><p>' + uid + '</p><p>' + uid + '</p>' + } + + var $tooltip = $('<span id="tt-outer" rel="tooltip" data-trigger="hover" data-placement="top">some text</span>') + .appendTo('#qunit-fixture') + + $tooltip.bootstrapTooltip({ + html: true, + animation: false, + trigger: 'hover', + delay: { show: 0, hide: 500 }, + container: $tooltip, + title: titleHtml + }) + + var obj = $tooltip.data('bs.tooltip') + + $('#tt-outer').trigger('mouseenter') + + var currentUid = $('#tt-content').text() + + $('#tt-outer').trigger('mouseleave') + equal(currentUid, $('#tt-content').text()) + + ok(obj.hoverState == 'out', 'the tooltip hoverState should be set to "out"') + + $('#tt-content').trigger('mouseenter') + ok(obj.hoverState == 'in', 'the tooltip hoverState should be set to "in"') + + equal(currentUid, $('#tt-content').text()) + }) + }) diff --git a/js/tooltip.js b/js/tooltip.js index 0758b07eefd6f6cb3a8b6092c85479de9b223de7..1444a7131bec88653f261bcb78ab95d1a616e916 100644 --- a/js/tooltip.js +++ b/js/tooltip.js @@ -105,6 +105,11 @@ var self = obj instanceof this.constructor ? obj : $(obj.currentTarget).data('bs.' + this.type) + if (self && self.$tip && self.$tip.is(':visible')) { + self.hoverState = 'in' + return + } + if (!self) { self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) $(obj.currentTarget).data('bs.' + this.type, self)