☰Read-only archive⌕
Looking for help with Bokeh?

This is a read-only archive. Ask questions and join the conversation on GitHub.

Visit Community Support on GitHub →
Archived discussions · Captured October 28, 2026

HoverTool and TapTool problem when TapTool is in 'inspect' behavior

Community Support
Guilhem
Guilhem

Hi,
We try to use both HoverTool and TapTool on the same plot as you did in this Jupyter notebook : http://nbviewer.jupyter.org/github/birdsarah/pycon_2015_bokeh_talk/blob/master/notebooks/Building%20the%20static%20visualization.ipynb
But, we don’t want the “selective” effect of the TapTool, we just want it to trigger a callback, so its behavior attribute is set to ‘inspect’.

The HoverTool works fine, but when we click on a glyph, the tooltip disappears and the callback is not triggered. Furthermore, an error message displays in the browser console :
TypeError: m is undefined
Bokeh</<[“models/tools/inspectors/hover_tool”]</s</e.prototype._update()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<[“common/selection_manager”]</o</e.prototype.inspect()
bokeh-0.12.0.min.js:3
bound ()
self-hosted:760
Bokeh</<[“models/tools/gestures/tap_tool”]</i</e.prototype._select()
bokeh-0.12.0.min.js:17
Bokeh</<[“models/tools/gestures/tap_tool”]</i</e.prototype._tap()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<[“common/ui_events”]</s</e.prototype._trigger_event()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._trigger()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._tap()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._hammer_element/</<()
bokeh-0.12.0.min.js:3
Bokeh</<[“hammerjs/hammer”]</</ct.prototype.emit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</<.emit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</K.prototype.tryEmit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</<.process/this._timer<()
bokeh-0.12.0.min.js:35
h/<()

``

I have written a simple code to reproduce the problem :

# coding=utf-8
from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource, TapTool, HoverTool, CustomJS
from bokeh.plotting import Figure

output_file("layout.html")

source = ColumnDataSource(
    data=dict(x=[2,3,5], y=[8,5,2]),
    name='source'
)

p = Figure(plot_width=550, plot_height=550, sizing_mode="fixed")

p.circle(x='x', y='y', source=source, size=50)

p.add_tools(TapTool(behavior='inspect', callback=CustomJS(code="alert('foo');")))
p.add_tools(HoverTool())

show(p)

``

If one removes the ‘inspect’ attribute from the TapTool, all works perfectly. Is there any reason for this conflict ?

Thanks,

Guilhem

⌁   Link to post
birdsarah_continuum
birdsarah_continuum

Hi!

" But, we
don’t want the “selective” effect of the TapTool" - I thought
TapTool always does a selection. I have never heard of setting the
behavior attribute - I wouldn’t be surprised if it’s broken - you
should feel free to open an issue though.

In the meantime I would suggest just manually styling the

selection/nonselection glyph so that even if it does a selection you
can’t tell - does that make sense?
Best,
Bird

···

http://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#selected-and-unselected-glyphs

   On 7/12/16 4:36 AM,

wrote:

Hi,

    We try to use both HoverTool and TapTool on the same plot as you

did in this Jupyter notebook : http://nbviewer.jupyter.org/github/birdsarah/pycon_2015_bokeh_talk/blob/master/notebooks/Building%20the%20static%20visualization.ipynb
But, we don’t want the “selective” effect of the TapTool, we
just want it to trigger a callback, so its behavior
attribute is set to ‘inspect’.

    The HoverTool works fine, but when we click on a glyph, the

tooltip disappears and the callback is not triggered.
Furthermore, an error message displays in the browser console :

TypeError: m is undefined

          Bokeh</<["models/tools/inspectors/hover_tool"]</s</e.prototype._update()

             bokeh-0.12.0.min.js:17

            Bokeh</<.backbone</</</y()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</g()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</p()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</c.trigger()

             bokeh-0.12.0.min.js:23

            Bokeh</<["common/selection_manager"]</o</e.prototype.inspect()

             bokeh-0.12.0.min.js:3

            bound ()

             self-hosted:760

            Bokeh</<["models/tools/gestures/tap_tool"]</i</e.prototype._select()

             bokeh-0.12.0.min.js:17

            Bokeh</<["models/tools/gestures/tap_tool"]</i</e.prototype._tap()

             bokeh-0.12.0.min.js:17

            Bokeh</<.backbone</</</y()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</g()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</p()

             bokeh-0.12.0.min.js:23

            Bokeh</<.backbone</</</c.trigger()

             bokeh-0.12.0.min.js:23

            Bokeh</<["common/ui_events"]</s</e.prototype._trigger_event()

             bokeh-0.12.0.min.js:3

            Bokeh</<["common/ui_events"]</s</e.prototype._trigger()

             bokeh-0.12.0.min.js:3

            Bokeh</<["common/ui_events"]</s</e.prototype._tap()

             bokeh-0.12.0.min.js:3

            Bokeh</<["common/ui_events"]</s</e.prototype._hammer_element/</<()

             bokeh-0.12.0.min.js:3

            Bokeh</<["hammerjs/hammer"]</</ct.prototype.emit()

             bokeh-0.12.0.min.js:35

          Bokeh</<["hammerjs/hammer"]</</<.emit()

             bokeh-0.12.0.min.js:35

            Bokeh</<["hammerjs/hammer"]</</K.prototype.tryEmit()

             bokeh-0.12.0.min.js:35

          Bokeh</<["hammerjs/hammer"]</</<.process/this._timer<()

             bokeh-0.12.0.min.js:35

            h/<()

``

    I have written a simple code to reproduce the problem :
# coding=utf-8
from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource, TapTool, HoverTool, CustomJS
from bokeh.plotting import Figure

output_file("layout.html")

source = ColumnDataSource(
    data=dict(x=[2,3,5], y=[8,5,2]),
    name='source'
)

p = Figure(plot_width=550, plot_height=550, sizing_mode="fixed")

p.circle(x='x', y='y', source=source, size=50)

p.add_tools(TapTool(behavior='inspect', callback=CustomJS(code="alert('foo');")))
p.add_tools(HoverTool())

show(p)

``

    If one removes the 'inspect' attribute from the TapTool, all

works perfectly. Is there any reason for this conflict ?

    Thanks,



    Guilhem

–

  You received this message because you are subscribed to the Google

Groups “Bokeh Discussion - Public” group.

  To unsubscribe from this group and stop receiving emails from it,

send an email to bokeh+unsubscribe@continuum.io.

  To post to this group, send email to bokeh@continuum.io.

  To view this discussion on the web visit [https://groups.google.com/a/continuum.io/d/msgid/bokeh/b1c26bd7-072d-45ef-bed6-d1620f2ca519%40continuum.io](https://groups.google.com/a/continuum.io/d/msgid/bokeh/b1c26bd7-072d-45ef-bed6-d1620f2ca519%40continuum.io?utm_medium=email&utm_source=footer).

  For more options, visit [https://groups.google.com/a/continuum.io/d/optout](https://groups.google.com/a/continuum.io/d/optout).

–
Sarah Bird
Developer, Bokeh

    [
      ![Continuum Analytics](http://docs.continuum.io/_static/img/ContinuumWordmark.png)
    ](http://continuum.io)

buisanguilhem@gmail.com

⌁   Link to post
Bryan
Bryan

This does seem like a bug, please file an issue with the sample code to reproduce.

Thanks,

Bryan

···

On Jul 18, 2016, at 5:24 PM, Sarah Bird - Continuum <sbird@continuum.io> wrote:

Hi!

"But, we don't want the "selective" effect of the TapTool" - I thought TapTool always does a selection. I have never heard of setting the behavior attribute - I wouldn't be surprised if it's broken - you should feel free to open an issue though.

In the meantime I would suggest just manually styling the selection/nonselection glyph so that even if it does a selection you can't tell - does that make sense? Appearance — Bokeh 3.3.2 Documentation

Best,

Bird

On 7/12/16 4:36 AM, buisanguilhem@gmail.com wrote:

Hi,

We try to use both HoverTool and TapTool on the same plot as you did in this Jupyter notebook : Jupyter Notebook Viewer
But, we don't want the "selective" effect of the TapTool, we just want it to trigger a callback, so its behavior attribute is set to 'inspect'.

The HoverTool works fine, but when we click on a glyph, the tooltip disappears and the callback is not triggered. Furthermore, an error message displays in the browser console :
TypeError: m is undefined
Bokeh</<["models/tools/inspectors/hover_tool"]</s</e.prototype._update()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<["common/selection_manager"]</o</e.prototype.inspect()
bokeh-0.12.0.min.js:3
bound ()
self-hosted:760
Bokeh</<["models/tools/gestures/tap_tool"]</i</e.prototype._select()
bokeh-0.12.0.min.js:17
Bokeh</<["models/tools/gestures/tap_tool"]</i</e.prototype._tap()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<["common/ui_events"]</s</e.prototype._trigger_event()
bokeh-0.12.0.min.js:3
Bokeh</<["common/ui_events"]</s</e.prototype._trigger()
bokeh-0.12.0.min.js:3
Bokeh</<["common/ui_events"]</s</e.prototype._tap()
bokeh-0.12.0.min.js:3
Bokeh</<["common/ui_events"]</s</e.prototype._hammer_element/</<()
bokeh-0.12.0.min.js:3
Bokeh</<["hammerjs/hammer"]</</ct.prototype.emit()
bokeh-0.12.0.min.js:35
Bokeh</<["hammerjs/hammer"]</</<.emit()
bokeh-0.12.0.min.js:35
Bokeh</<["hammerjs/hammer"]</</K.prototype.tryEmit()
bokeh-0.12.0.min.js:35
Bokeh</<["hammerjs/hammer"]</</<.process/this._timer<()
bokeh-0.12.0.min.js:35
h/<()

I have written a simple code to reproduce the problem :
# coding=utf-8
from bokeh.io import output_file,
show

from bokeh.models import ColumnDataSource, TapTool, HoverTool, CustomJS
from bokeh.plotting import Figure

output_file
("layout.html")

source
= ColumnDataSource(

data=dict(x=[2,3,5], y=[8,5,2]),

name='source'
)

p
= Figure(plot_width=550, plot_height=550, sizing_mode="fixed")

p
.circle(x='x', y='y', source=source, size=50)

p
.add_tools(TapTool(behavior='inspect', callback=CustomJS(code="alert('foo');")))

p
.add_tools(HoverTool())

show
(p)

If one removes the 'inspect' attribute from the TapTool, all works perfectly. Is there any reason for this conflict ?

Thanks,

Guilhem

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/b1c26bd7-072d-45ef-bed6-d1620f2ca519%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
Sarah Bird
Developer, Bokeh

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/7bfc68a5-91f0-dcde-07ba-8482ca2b9bee%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

⌁   Link to post
Guilhem
Guilhem

I have created an issue here : https://github.com/bokeh/bokeh/issues/4839
With a simple repository to reproduce : https://github.com/EngelOfChipolata/bokeh_hover_tap_tools

···

On Tuesday, July 12, 2016 at 12:47:18 PM UTC+2, buisan...@gmail.com wrote:

Hi,
We try to use both HoverTool and TapTool on the same plot as you did in this Jupyter notebook : http://nbviewer.jupyter.org/github/birdsarah/pycon_2015_bokeh_talk/blob/master/notebooks/Building%20the%20static%20visualization.ipynb
But, we don’t want the “selective” effect of the TapTool, we just want it to trigger a callback, so its behavior attribute is set to ‘inspect’.

The HoverTool works fine, but when we click on a glyph, the tooltip disappears and the callback is not triggered. Furthermore, an error message displays in the browser console :
TypeError: m is undefined
Bokeh</<[“models/tools/inspectors/hover_tool”]</s</e.prototype._update()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<[“common/selection_manager”]</o</e.prototype.inspect()
bokeh-0.12.0.min.js:3
bound ()
self-hosted:760
Bokeh</<[“models/tools/gestures/tap_tool”]</i</e.prototype._select()
bokeh-0.12.0.min.js:17
Bokeh</<[“models/tools/gestures/tap_tool”]</i</e.prototype._tap()
bokeh-0.12.0.min.js:17
Bokeh</<.backbone</</</y()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</g()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</p()
bokeh-0.12.0.min.js:23
Bokeh</<.backbone</</</c.trigger()
bokeh-0.12.0.min.js:23
Bokeh</<[“common/ui_events”]</s</e.prototype._trigger_event()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._trigger()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._tap()
bokeh-0.12.0.min.js:3
Bokeh</<[“common/ui_events”]</s</e.prototype._hammer_element/</<()
bokeh-0.12.0.min.js:3
Bokeh</<[“hammerjs/hammer”]</</ct.prototype.emit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</<.emit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</K.prototype.tryEmit()
bokeh-0.12.0.min.js:35
Bokeh</<[“hammerjs/hammer”]</</<.process/this._timer<()
bokeh-0.12.0.min.js:35
h/<()

``

I have written a simple code to reproduce the problem :

# coding=utf-8
from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource, TapTool, HoverTool, CustomJS
from bokeh.plotting import Figure

output_file("layout.html")

source = ColumnDataSource(
    data=dict(x=[2,3,5], y=[8,5,2]),
    name='source'
)

p = Figure(plot_width=550, plot_height=550, sizing_mode="fixed")

p.circle(x='x', y='y', source=source, size=50)

p.add_tools(TapTool(behavior='inspect', callback=CustomJS(code="alert('foo');")))
p.add_tools(HoverTool())

show(p)

``

If one removes the ‘inspect’ attribute from the TapTool, all works perfectly. Is there any reason for this conflict ?

Thanks,

Guilhem

⌁   Link to post

End of archived discussion · Replies are disabled