Проблема
Я хотел бы добавить немного клиентского JavaScript на свой сайт Eleventy. Кажется, я не могу получить доступ к document.
с помощью Eleventy, что означает, что я не могу получить доступ к элементам и прослушивать их на предмет событий. Пример того, что не работает:
const formElement = document.querySelector("form")
Сообщение об ошибке, которое я получаю от Eleventy:
ReferenceError: document is not defined
Вопрос
Как мне работать с Eleventy, чтобы отслеживать изменения элементов документа и вносить изменения на страницу?
Пример:
formElement.addEventListener("change", function () {
// Update nearby paragraph element based on form value
});
Мой реальный сценарий: я хотел бы, чтобы отображался элемент абзаца, который из form
input type="radio"
имеет значение checked
.
Подходите так далеко
У меня есть файл в / data под названием fruit.json:
{
"items": [
{
"name": "Apple"
},
{
"name": "Banana"
},
{
"name": "Strawberry"
},
{
"name": "Mango"
},
{
"name": "Peach"
},
{
"name": "Watermelon"
},
{
"name": "Blueberry"
}
]
}
И файл HTML в / _includes / layouts на основе моего файла base.html:
{% extends "layouts/base.html" %}
{% block content %}
<form>
{% for item in fruits.items %}
{# Create a radio button for each, with the first one checked by default #}
<input type="radio" name="screen" id="{{ item.name | slug }}" value="{{ item.name | slug }}" {% if loop.index === 1 %} checked {% endif %}>
<label for="{{ item.name | slug }}">{{ item.name }}</label>
{% endfor %}
{% set selectedFruit = helpers.getSelectedFruit() %}
<p>Currently selected item from above is: {{ selectedFruit }}</p>
</form>
{% endblock %}
Обратите внимание, что переменная с именем selectedFruit
назначается вспомогательной функции:
{% set selectedScreen = helpers.getSelectedScreen() %}
Эта getSelectedScreen()
функция выглядит так:
getSelectedScreen() {
const formEl = document.querySelector("form")
console.log(formEl)
}
Помимо того, что я не могу работать с .document
, я чувствую, что этот подход, вероятно, «противоречит сути» Eleventy, генераторов статических сайтов в других отношениях:
- Скрипт называется средним документом
- Скрипт одноразовый и далек от контекста
Интересно, если я вообще подхожу к этому неправильно, или мне просто нужно что-то сделать, чтобы разрешить .document
доступ.
document
, вероятно, недоступен из-за того, что содержимое сайта создается статически на стороне сервера. Что касается использования скриптов, есть довольно подробный раздел о файлах данных JavaScript. - person DigitalDrifter   schedule 24.11.2020