【发布时间】:2024-05-25 12:50:02
【问题描述】:
我有一个模型的 Django 管理页面,模型的 DateField 称为“日期”:
# models.py
class Article(models.Model):
date = models.DateField(
help_text="Article publication date"
)
# admin.py
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
change_form_template = "article_extension.html"
我已扩展此模型的管理员添加/更改模板,以包括选择日期时执行的 JavaScript。
在管理员添加/更改页面中,此字段的默认小部件是带有日历选择器的文本元素。页面源代码没有显示选择器的任何代码,所以我唯一可以附加 JavaScript 的就是输入框:
<input type="text" ... id="id_date">
在模板的 JavaScript 中,我为这个输入框上的“输入”事件附加了一个 EventListener:
# article_extension.html
{% extends "admin/change_form.html" %}
{% block extrahead %}
block.super
<script type="text/javascript">
window.onload = function() {
var dateInput = document.getElementById("id_date");
dateInput.addEventListener('input', dateListener);
function dateListener() {
console.log("date event recognized");
}
}
</script>
{% endblock %}
然后,当我从日历选择器中选择日期时,输入框的内容会更改以反映所选日期,但 EventListener 不会触发。但是,如果我在输入框中手动输入内容,EventListener 会触发,并且控制台中会显示“日期事件识别”。显然,当使用日历将内容放入输入框中时,这并不能被识别为“输入”。
如何将 EvenListener 附加到输入框或日历以在从日历中选择日期时触发?
【问题讨论】:
标签: javascript django