ОБНОВЛЕНИЕ: вот лучший пример;Мой код
let myFunction = () => {
console.log('Yo');
alert('Yo');
}
let About = {
render : async () => {
return /*html*/`
<h1> About </h1>
<button id="myBtn" type="button" >Try it</button>
<script>
document.getElementById("myBtn").addEventListener ("click", ${myFunction})
</script>
`
}
}
export default About;
Это преобразуется в код HTML;
<div id="page_container" class="container pageEntry">
<h1> About </h1>
<button id="myBtn" type="button">Try it</button>
<script>
document.getElementById("myBtn").addEventListener ("click", () => {
console.log('Yo');
alert('Yo');
})
</script>
</div>
Однако при нажатии на кнопку ничего не происходит;
Я пытаюсьработать на базовом vanilla js SPA, и я столкнулся с проблемой, когда я не могу вызвать какие-либо функции в моем текущем модуле из HTML-кода.Я использую модули es6, указав в моем index.html, что скрипт-тег имеет тип = "module".
Например, в этом коде я попробовал как встроенный атрибут тега onclick, так и добавивпрослушиватель событий (я использовал по одному, а не вместе. показываю это здесь только для иллюстрации)
let myFunction = () => {
console.log('Yo');
alert('Yo');
}
let About = {
render : async () => {
return /*html*/`
<h1> About </h1>
<button id="myBtn" type="button" onclick="${myFunction}">Try it</button>
<script>
document.getElementById("myBtn").addEventListener ("click", myFunction()})
</script>
`
}
}
export default About;
, и я получаю результирующее представление как
content.innerHTML = await page.render();
из моего основного модуля.
Единственный способ, которым я могу это сделать, это заставить мой вызов функции возвращать еще один шаблон, содержащий фактический код JS.
let myFunction = () => {
return `
alert('Yo');
document.getElementById('myBtn').textContent = 'Duh'
`
}
однако это создает очень уродливую страницу, гдевесь мой код JS добавлен в HTML-код, и я больше не могу использовать двойные кавычки в своем коде JS.