removeEventListener для загрузки данных объекта - PullRequest
0 голосов
/ 14 сентября 2018

Я добавил прослушиватель событий для отслеживания загрузки SVG после действия пользователя.

HTML

<object id="mySVG" type="image/svg+xml" data="default.svg"></object>

JS

mySVG = document.getElementById('mySVG');
mySVG.addEventListener('load', function () {
  // work with SVG contentDocument
});
mySVG.setAttribute('data', 'new.svg');

После другого пользователяДействие, я очищаю SVG, загружая пустой встроенный SVG

var svgUrl = URL.createObjectURL(new Blob(['<svg xmlns="http://www.w3.org/2000/svg" width="700" height="700"/>'], {'type':'image/svg+xml'}));
mySVG.setAttribute('data', svgUrl);

Мне кажется, что установка этого пустого SVG также вызывает событие загрузки, что нежелательно.Поэтому я попытался

mySVG.removeEventListener('load');

Это дает мне ошибку

TypeError: Недостаточно аргументов для EventTarget.removeEventListener.

Какой правильный синтаксисдля removeEventListener в этом контексте?

edit: метод установки пустого SVG был неверным, исправлен после прочтения this .

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

mySVG.removeEventListener ( 'нагрузка');должен иметь цель как второй параметр, по которому он слушает события

0 голосов
/ 14 сентября 2018

Вы должны назвать свою функцию и затем передать ее в качестве второго аргумента как addEventListener, так и removeEventListener, например:

mySVG = document.getElementById('mySVG');

function loadFunction() {
  // work with SVG contentDocument
}

mySVG.addEventListener('load', loadFunction);
mySVG.setAttribute('data', 'new.svg');

mySVG.setAttribute('data', 'data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22700%22%20height%3D%22700%22%2F%3E');


mySVG.removeEventListener('load', loadFunction);
<object id="mySVG" type="image/svg+xml" data="default.svg"></object>

removeEventListener требуется как минимум два аргумента, тип события ('load') и удаляемый слушатель, поэтому вы должны ссылаться на прослушиватель, который былдобавлено ранее для его удаления.

...