javascript - 在Django中,如何使选择下拉选项自动提交表单?

标签 javascript python jquery django

我正在尝试实现一个基于另一个字段预填充字段的表单。作为起点,我想在选择下拉菜单中的选项时使表单“自动提交”。我尝试过以下模板:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    $(".auto-submit").change(function() {
        $(this).closest("form").submit();
    });
</script>


<form action="" method="post">{% csrf_token %}
    {% for field in form %}
        {% if field.name == "checkin_type" %}
            <div class="auto-submit">
                {{ field.errors }}
                {{ field.label_tag }}
                {{ field }}
            </div>
        {% else %}
            <div>
                {{ field.errors }}
                {{ field.label_tag }}
                {{ field }}
            </div>
        {% endif %}
    {% endfor %}
    <input type="submit" value="Send message" />
</form>

其中 View 基于 Django 的通用 CreateView:

from django.views import generic
from .models import CheckIn


class CheckInCreate(generic.CreateView):
    model = CheckIn
    fields = '__all__'

模型是

from django.db import models
from django.urls import reverse


class CheckInType(models.Model):
    title = models.CharField(blank=True, max_length=255)
    description = models.TextField(blank=True)

    def __str__(self):
        return self.title


class CheckIn(models.Model):
    checkin_type = models.ForeignKey(CheckInType, null=True, on_delete=models.CASCADE)
    title = models.CharField(blank=True, max_length=255)
    description = models.TextField(blank=True)

    notes = models.TextField(blank=True)

    # Scheduling
    requested_date = models.DateField(blank=True, null=True)
    completed_date = models.DateField(blank=True, null=True)

    def get_absolute_url(self):
        return reverse('checkin-detail', kwargs={'pk': self.id})

    def save(self, *args, **kwargs):
        if self.checkin_type:
            if not self.title:
                self.title = self.checkin_type.title
            if not self.description:
                self.description = self.checkin_type.description
        super().save(*args, **kwargs)

但是,如果我实际上在浏览器中选择下拉菜单选项,则什么也不会发生。有人可以解释为什么这不起作用吗?

最佳答案

您尝试在下拉菜单加载到 DOM 之前附加事件处理程序。您可以使用document.ready等待加载完毕后再附加处理程序

$(document).ready(function(){
    $(".auto-submit").change(function() {
        $(this).closest("form").submit();
        //this.form.submit(); //less verbose
    });
});

关于javascript - 在Django中,如何使选择下拉选项自动提交表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49037998/

相关文章:

javascript - setTimeout/clearTimeout 问题

javascript - 将鼠标悬停在变化的图像上

javascript - KineticJS 无法用图像填充多边形

python - PyQt5:如何对齐状态栏的元素?

javascript - 将函数从 iframe 附加到父窗口并获取适当的范围

javascript - 选择和更改对象类时 jQuery 不起作用

javascript - onChange 无法显示/隐藏 div

javascript - 使用未选中的复选框,如何过滤掉始终隐藏的 NSFW 标记的 div,但选中打开时,以遵循可见性规则?

python - 从命令行传递给 python 3.x 脚本的参数

python readline lib 当用户按一次退格键时删除整行