Javascript 如果没有您的帮助,本可以识别相关的JS文件或handleCalendarCallback函数。我选择了选项2;这是相当具有挑战性的,但它的工作!第一次单击日期选择器时,似乎会触发“焦点”,但在选择新日期后,焦点似乎不会再次触发,因为在下次单击日期选择器之前

Javascript 如果没有您的帮助,本可以识别相关的JS文件或handleCalendarCallback函数。我选择了选项2;这是相当具有挑战性的,但它的工作!第一次单击日期选择器时,似乎会触发“焦点”,但在选择新日期后,焦点似乎不会再次触发,因为在下次单击日期选择器之前,javascript,django,Javascript,Django,如果没有您的帮助,本可以识别相关的JS文件或handleCalendarCallback函数。我选择了选项2;这是相当具有挑战性的,但它的工作!第一次单击日期选择器时,似乎会触发“焦点”,但在选择新日期后,焦点似乎不会再次触发,因为在下次单击日期选择器之前,日期值不会有所不同。我在包含表单字段的div上设置了id。{{form.time|u filter|as_crispy_field}关于如何让这个解决方案发挥作用,有什么想法吗?谢谢你的另一个令人惊讶的答案。如果没有您的帮助,我永远不会识别相


如果没有您的帮助,本可以识别相关的JS文件或
handleCalendarCallback
函数。我选择了选项2;这是相当具有挑战性的,但它的工作!第一次单击日期选择器时,似乎会触发“焦点”,但在选择新日期后,焦点似乎不会再次触发,因为在下次单击日期选择器之前,日期值不会有所不同。我在包含表单字段的div上设置了id。{{form.time|u filter|as_crispy_field}关于如何让这个解决方案发挥作用,有什么想法吗?谢谢你的另一个令人惊讶的答案。如果没有您的帮助,我永远不会识别相关的JS文件或
handleCalendarCallback
函数。我选择了选项2;这是相当具有挑战性的,但它的工作!第一次单击日期选择器时,似乎会触发“焦点”,但在选择新日期后,焦点似乎不会再次触发,因为在下次单击日期选择器之前,日期值不会有所不同。我在包含表单字段的div上设置了id。{{form.time{u filter}as{u crispy{u field}有没有想法让这个解决方案起作用?
# 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"
<input type="text" ... id="id_date">
# 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 %}
handleCalendarCallback: function(num) {
    var format = get_format('DATE_INPUT_FORMATS')[0];
    // the format needs to be escaped a little
    format = format.replace('\\', '\\\\')
        .replace('\r', '\\r')
        .replace('\n', '\\n')
        .replace('\t', '\\t')
        .replace("'", "\\'");
    return function(y, m, d) {
        DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
        DateTimeShortcuts.calendarInputs[num].focus();
        document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none';
    };
},
class AdminDateWidget(forms.DateInput):
    class Media:
        js = [
            'admin/js/calendar.js',
            'admin/js/admin/MyVersionOfDateTimeShortcuts.js',
        ]

    def __init__(self, attrs=None, format=None):
        attrs = {'class': 'vDateField', 'size': '10', **(attrs or {})}
        super().__init__(attrs=attrs, format=format)
var dateValue;
window.onload = function() {
    var dateInput = document.getElementById("id_date");
    dateInput.addEventListener('focus', dateListener);

    function dateListener(event) {
        if (dateValue === event.target.value) {
            return
        }
        dateValue = event.target.value;
        // put the stuff you actually want to happen here
    }
}