Не срабатывает клик по svg
Здравствуйте! Появился такой вопрос.
Добавляю на страницу svg изображение: <object data="src/img/logo.svg" type="image/svg+xml" class="navigation__logo"> <img src="src/img/logo.png" alt="" class="navigation__logo"> </object> Пытаюсь на него повесить клик: var logo = document.getElementsByClassName('navigation__logo')[0]; logo.addEventListener('click', function(){ alert(123); }); Так же пробовал через onclick в object, не хочет срабатывать и всё) Что я не так делаю?:-? :-? |
А если так:
var logo = document.querySelectorAll('.navigation__logo'); for(i=0; i<logo.length; i++) { logo[0].addEventListener('click', function() { alert(123); }) } |
KolaKola, а зачем <object>? Используйте просто <img>, можете обернуть в div.
|
click не работает, mouseover работает....
Оборачивание в div не помогает. <object data="https://svgontheweb.com/assets/img/bblogo-optim.svg" class="navigation__logo"> <img src="src/img/logo.png" alt="" class="navigation__logo"> </object> <script> var logo = document.getElementsByClassName('navigation__logo')[0]; // logo.addEventListener('click', function(){ // alert(123); // }); logo.addEventListener('mouseover', function(){ alert(456); }); </script> svg в img - клик работает. <img src="https://svgontheweb.com/assets/img/bblogo-optim.svg" class="navigation__logo"> <script> var logo = document.getElementsByClassName('navigation__logo')[0]; logo.addEventListener('click', function(){ alert(123); }); </script> |
MC-XOBAHCK
Спасибо! Но так тоже не срабатывает. Еще заметил, что когда делаю дабл клик по svg в консоль вылетает ошибка от неизвестного мне sandboxed-default-document-end.js: Uncaught TypeError: Cannot read property 'tagName' of null. |
Да, верно! mouseover срабатывает, а клик нет.
Просто, при наведении на svg заливка у неё менялась, а при клике я хотел производить действия. В случае, если вставить svg в img, то как мне известно заливку, цвет линий и т.п. менять нельзя, могу ошибаться. |
MC-XOBAHCK,
Зачем в цикле запускать создание обработчиков для logo[0] ? Думаете, количество поможет? |
KolaKola,
Надо обработчик ставить на элементы внутри объекта. Если у вас svg в том же домене - попробуйте такой вариант: var logo = document.getElementsByClassName('navigation__logo')[0]; document.addEventListener('load',function(){ logo.contentDocument.querySelector('svg').addEventListener('click', function(){ alert(123); }); }); Кроссдоменно contentDocument в object, похоже, недоступен... |
Часовой пояс GMT +3, время: 14:44. |