TL/DR:将事件侦听器附加到非 SVG 父元素。
jQuery 文档中的注释有些误导。
委派事件不适用于 SVG。
应该是...
当侦听器附加到SVG时,委托事件不起作用。
当事件侦听器附加到 SVG 元素时,jQuery 的事件委托不起作用;但是,如果您将侦听器附加到 SVG 的非 SVG 父级,事件传播将按预期工作,并且任何匹配 SVG 元素的选择器确实会触发您的事件处理函数。
将侦听器附加到 SVG 元素将不起作用:
$("#floor").on('click','.drawnLine', function() {
console.log($(this).data('index'));
});
但是将其附加到父元素将起作用:
$(document.body).on('click','#floor .drawnLine', function() {
console.log($(this).data('index'));
});
Note: one quirk I've noticed is that if the event target is an SVG element, the event won't bubble up all the way to document.body
on iOS. So if you want iOS users to be able to trigger your handler function you'll need to attach your event listener to some element in between (such as the div
element your SVG resides in).