Делая setName("clicked")
, вы мгновенно вызываете функцию setName
вместо передачи ссылки на функцию. Вы можете решить эту задачу, передав функцию в качестве аргумента обработчика события, в котором вы вызываете setName("clicked")
.
function button5_makeClickable(id) {
var drawing = document.getElementById('svgfile');
drawing.addEventListener('click', function() {
setName("clicked")
});
}
Но ваш код в настоящее время постоянно добавляет прослушиватели событий в элемент <object>
. Элемент нуждается только в прослушивателе событий одного клика.
Используйте флаг . Это логическое значение (true / false), которое действует как переключатель, чтобы делать или не делать что-то в зависимости от его значения. Добавьте прослушиватель событий к элементу <object>
и проверьте в обработчике событий, установлен ли флаг true
. Если это так, измените текст внутри диапазона, если это не так, ничего не делайте.
В приведенном ниже примере показано, как это может работать.
Кроме того, не используйте встроенное событие. слушатели у вас HTML. Используя addEventListener
, вы должны научиться подключать обработчики событий.
var myButton5 = document.getElementById('myButton5');
var drawing = document.getElementById('svgfile');
var svgIsClickable = false;
function setName(name) {
var elementHtmltoFill = window.document.getElementById("id_to_be_replaced");
console.log(elementHtmltoFill)
elementHtmltoFill.innerHTML = name;
}
function button5_makeClickable(event) {
svgIsClickable = true;
}
myButton5.addEventListener('click', button5_makeClickable);
drawing.addEventListener('click', function() {
if (svgIsClickable === true) {
setName("clicked");
}
});
object {
display: block;
width: 50px;
height: 50px;
background: gray;
}
<div>
<p>This will be replaced <br/>
<span id="id_to_be_replaced" style="color: red; font-weight: bold;"> Replaced normally </span>.</p>
</div>
<br />
<input name="button5" type="button" id="myButton5" onClick="button5_makeClickable" value="4. Svg clickable" />
<br />
<div>
<object id="svgfile" data="exemple.svg" type="image/svg+xml"> </object>
</div>