Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не срабатывает клик по svg (https://javascript.ru/forum/misc/74122-ne-srabatyvaet-klik-po-svg.html)

KolaKola 15.06.2018 07:42

Не срабатывает клик по 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, не хочет срабатывать и всё)
Что я не так делаю?:-? :-?

MC-XOBAHCK 15.06.2018 11:10

А если так:
var logo = document.querySelectorAll('.navigation__logo');

for(i=0; i<logo.length; i++) {
   logo[0].addEventListener('click', function() {
       alert(123);
   })
}

ruslan_mart 15.06.2018 11:19

KolaKola, а зачем <object>? Используйте просто <img>, можете обернуть в div.

Dilettante_Pro 15.06.2018 11:26

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>

KolaKola 15.06.2018 11:27

MC-XOBAHCK

Спасибо! Но так тоже не срабатывает.
Еще заметил, что когда делаю дабл клик по svg в консоль вылетает ошибка от неизвестного мне sandboxed-default-document-end.js:

Uncaught TypeError: Cannot read property 'tagName' of null.

KolaKola 15.06.2018 11:39

Да, верно! mouseover срабатывает, а клик нет.
Просто, при наведении на svg заливка у неё менялась, а при клике я хотел производить действия.
В случае, если вставить svg в img, то как мне известно заливку, цвет линий и т.п. менять нельзя, могу ошибаться.

Dilettante_Pro 15.06.2018 11:42

MC-XOBAHCK,
Зачем в цикле запускать создание обработчиков для logo[0] ?
Думаете, количество поможет?

Dilettante_Pro 15.06.2018 13:53

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.