How do you make an SVG element mouse event bubble up through another element?

You can also use the following style, to "hide" certain svg elements for mouse events. In my case, it was the mouseover event, that I wanted to bubble through:

pointer-events: none;

For a quick fix, you can move the range above the overlay and manually call the overlay event handlers from the range.

http://jsfiddle.net/Rk5Hp/

 svg.append("rect")
      .attr("class", "overlay")
      .attr("width", width)
      .attr("height", height)
      .on("mouseover", function() { focus.style("display", null); })
      .on("mouseout", function() { focus.style("display", "none"); })
      .on("mousemove", mousemove);

  // move range above overlay and call the overlay event handlers from there
  svg.append("rect")
      .attr("id", "range")
      .attr("class", "range")
      .attr("x", left)
      .attr("width", wid)
      .attr("height", height)
      .on("mousemove", mousemove)
      .on("mouseout", function() { focus.style("display", "none"); })
      .on("mouseover", function() {
          focus.style("display", null);
          // event handling for range mouseover (alert broke mouse move)
          console.log("I can see you!");
      });

Bubbling acts at the dom level, and since there is no way to have a rect be a child of another rect, bubbling will not take care of this for you. Grouping the elements together and placing a handler that checks the event target on the group will keep you from registering the event handler twice, but suffers from the same basic problem: when elements overlap, whichever element is declared last in the source order will get the event.