Значение по умолчанию для событий указателя равно visiblePainted
, в котором, если вы удалите и обводку, и заливку фигуры svg, для события указателя не останется ничего, чтобы завершиться.
Таким образом, вы должны явно установить visibleFill
, visible
, fill
или all
, если хотите продолжать использовать fill="none"
.
document.querySelector('rect').onclick = function(){
console.log('clicked on the rect');
}
svg {border: 1px solid;}
<svg>
<rect pointer-events="all" fill="none" x="0" y="0" width="300" height="150"/>
</svg>
В качестве альтернативы, вы можете установить прозрачную заливку. (Мне сказали, что это не очень хорошая идея, даже если она будет работать ...)
Также обратите внимание, что
setAttributeNS(null,...
это просто setAttribute(...
- добавление прослушивателей событий в качестве атрибута крайне не рекомендуется, поскольку это означает, что вы сможете запускать только обратные вызовы из глобальной области видимости.