问题
我想在我的 Eleventy 网站上添加一点客户端 JavaScript。我似乎无法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
'sinput type="radio"
具有 value checked
。
到目前为止的接近
我在 /data 中有一个名为 fruits.json 的文件:
{
"items": [
{
"name": "Apple"
},
{
"name": "Banana"
},
{
"name": "Strawberry"
},
{
"name": "Mango"
},
{
"name": "Peach"
},
{
"name": "Watermelon"
},
{
"name": "Blueberry"
}
]
}
/_includes/layouts 中的 HTML 文件基于我的 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
访问。