javascript - Django - 无法将 Django 表单的 id 传递给 javascript 变量
问题描述
所以我阅读了 django 文档,django 表单字段 id 应该具有 id_(form field name) 格式,但是当我在将表单字段分配给 javascript 变量时尝试引用此 id 时,它返回 null。为了测试这一点,我使用了 auto_id 来确保我在 javascript 中使用的 id 与我试图引用的字段 id 匹配,并且确实如此。此外,我将另一个 html 元素(“testid”)传递给我的 javascript,以确保它可以与模板中的其余元素一起使用,并且确实如此。为什么我可以将所有 html 元素的 id 分配给 javascript 变量而不是 django 表单?
forms.py(不包括选项列表以节省空间)
class FilterForm(forms.Form):
dataset = forms.CharField(label='', widget=forms.Select(choices=DATASET_CHOICES))
graph_type = forms.CharField(label='', widget=forms.Select(choices=GRAPH_CHOICES))
html
{% extends 'base.html' %}
{% load materializecss %}
{% block content %}
<form action = "", method = "POST">
{{form|materializecss}}
</form>
{{form.graph_type.auto_id}}
<div id = "testid"></div>
{% endblock %}
main.js
const carInput = document.getElementById("id_graph_type")
const testInput = document.getElementById("testid")
carInput.addEventListener('change', e=>{
console.log('Changed')
})
testInput.addEventListener('change', e=>{
console.log('Changed')
})
这是表单到浏览器的 html 输出
<form action = "", method = "POST">
<div class="input-field col s12 ">
<select name="dataset"
class=" validate">
<option value="Choose a Dataset">Choose a Dataset</option>
<option value="US Mortality By State">US Mortality By State</option>
<option value="US Average temperature">US Average temperature</option>
<option value="Food Prices By State">Food Prices By State</option>
</select>
<label class="control-label s12 "></label>
</div>
<div class="input-field col s12 ">
<select name="graph_type"
class=" validate"
>
<option value="Choose Plot Type">Choose Plot Type</option>
<option value="Bar Graph">Bar Graph</option>
<option value="Line Graph">Line Graph</option>
<option value="Count Plot">Count Plot</option>
</select>
<label class="control-label s12 "></label>
解决方案
默认情况下,MaterializeCSS 似乎不会id
在呈现的 html 中的表单字段上设置属性。
您应该能够手动完成(但这实际上是一个 materializecss 限制,而不是 Django 问题)。
在您的小部件中设置id
:
graph_type = forms.CharField(label='', widget=forms.Select(choices=GRAPH_CHOICES, attrs={'id': 'id_graph_type'}))
这应该可以让 materializecss 模板标签将 id 呈现到您的 HTML 中。
推荐阅读
- c - 为什么不管成员的顺序如何,这个结构的大小都是一样的?
- sql - 用于 oracle 查询的 SQL 获取大多数服务预订的时间
- maven - 在 TeamCity 与本地运行时,Maven 多模块项目中的不同行为
- r - 使用 R Shiny 收集当前用户输入并忽略/删除以前的输入
- python - 有没有办法打印在 Python 中生成整数的数学?
- python - 如何在 QMainWindow 中显示发光的标签
- javascript - 如何在 Vue created() 钩子中使用原生 javascript 方法?
- vue.js - 无法使用带有 Vue.js 的 Javascript 解释器导入 Ink 解释器
- excel - Excel 如果当前时间晚于给定时间,则等于是
- wix - WIX MSI 从 MSI 创建的目录中的 DLL 库安装驱动程序会导致升级过程中出现问题