aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Gonyea <[email protected]>2014-08-04 13:03:11 -0700
committerScott Gonyea <[email protected]>2014-08-28 17:17:50 -0700
commitaac0e16452301a4735a668dc228b6b084b2d63d0 (patch)
tree2b5f01ea91a96a9320d2ea4e271adeb57cedc165
parent9096c2002123a6dafdf0c3d9df5d069c968d738e (diff)
downloadbootstrap-aac0e16452301a4735a668dc228b6b084b2d63d0.tar.xz
bootstrap-aac0e16452301a4735a668dc228b6b084b2d63d0.zip
Fix hover-tooltip flickering when mouse re-enters
- is(':visible') seems to be the only reliable check, without a refactoring of how hoverState is used - tests need improvement
-rw-r--r--js/tests/unit/tooltip.js61
-rw-r--r--js/tooltip.js5
2 files changed, 66 insertions, 0 deletions
diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js
index 7896c2c96..c0c628485 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 0758b07ee..1444a7131 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)