Почему это не работает
Причины, по которым он не работает, заключаются в том, что за Stackblitz существует система создания активов, которая обрабатывает ваш код Javascript как modules .
Это означает, что переменные, определенные в этих модулях, доступны только внутри этих модулей и не становятся присоединенными к глобальному пространству имен (как вы ожидали и, кажется, привыкли).
Минимум, необходимый для его исправления
Для этого вам нужно явно присоединить эти переменные к глобальному объекту , который внутри браузера выглядит как window
.
Простое добавление следующей строки в конец файла index.js заставит ваш код работать:
window.test = test;
лучший способ
Обратите внимание, что использование встроенных обработчиков событий непосредственно на элементе (например, onclick
) считается плохой практикой (и имеет практические недостатки, но это может привести к слишком серьезным последствиям). Вместо этого вы должны использовать функцию Javascripts Element.prototype.addEventlistener()
. Шаги, чтобы добраться туда:
Добавьте id
к вашей кнопке, чтобы ваш Javascript мог ее найти:
<button id="testButton">Press</button>
Затем поместите этот элемент в переменную:
var button = document.getElementById('testButton');
Последний шаг: добавьте прослушиватель событий для события click
:
button.addEventListener('click', test)
Вот полная index.js
для этой измененной версии:
// Import stylesheets
import './style.css';
function test(){
alert('here');
}
var button = document.getElementById('testButton');
button.addEventListener('click', test);
Как сделать его еще безопаснее и лучше
Еще одно примечание: если вы поместите тег скрипта, загружающий Javascript, в раздел head
документа, вам нужно либо добавить атрибут defer
к тегу, либо обернуть часть кода, которая должна получить доступ к DOM в обработчике событий DOMContentLoaded
:
// Import stylesheets
import './style.css';
function test(){
alert('here');
}
document.addEventListener('DOMContentLoaded', function () {
var button = document.getElementById('testButton');
button.addEventListener('click', test);
}
В противном случае HTML еще не был проанализирован браузером, когда ваш Javascript пытается найти кнопку и подключить прослушиватель событий.