Не срабатывает клик по 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, время: 21:46. |