按下提交按钮时,Django下拉选项不起作用

时间:2018-06-06 15:52:05

标签: javascript jquery html

我在页面中有一个下拉选择和“提交”按钮。某些字段在特定下拉列表选择时消失。我可以隐藏/显示除密码字段以外的所有其他字段。每当我用jquery隐藏密码字段时,提交按钮都不起作用。 以下是我的代码文件。

  1. HTML模板django
  2. < script >
    
      $(document).ready(function() {
    
    
        $('#type').change(function(eventObject) {
          if ($(this).val() == 'sercomm') {
    
            $('.sample').show();
            $('.sample_netip').show();
            $('.sample_password').show();
            $('.sample_username').hide();
    
          } else {
            $('.sample').show();
            $('.sample_password').show();
            $('.sample_netip').hide();
    
          }
        }).change();
    
      });
    
    <
    /script>
    <form class="form-horizontal" method="post" role="form">{% csrf_token %} {# dropdown#}
      <div class="form-group">
        <label class="col-sm-3 control-label">{% trans "Mode" %}</label>
    
        <div class="col-sm-6">
          <select name="type" class="form-control" id="type">
            <option value="ex1" selected>{% trans "ex1" %}</option>
            <option value="ex2">{% trans "ex2" %}</option>
          </select>
        </div>
      </div>
      {# end of dropdown#}
      <div class="form-group sample">
        <label class="col-sm-3 control-label">{% trans "Name" %}</label>
    
        <div class="col-sm-6">
          <input type="text" class="form-control" name="name" placeholder="{% trans " Name " %}" maxlength="20" id="name" required pattern="[a-zA-Z0-9\.\-_]+">
        </div>
      </div>
    
      <div class="form-group sample">
        <label class="col-sm-3 control-label">{% trans "Management Network IP Address" %}</label>
    
        <div class="col-sm-6">
          <input type="text" class="form-control" name="ipaddr" value="192.168.255.129" maxlength="20" required pattern="^(25[0-5]|2[0-4]\d|[0-1]?\d?[1-9]|[0-1]?[1-9][0])(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$">
        </div>
      </div>
    
      <div class="form-group sample_netip">
        <label class="col-sm-3 control-label">{% trans "Radio Network IP Address" %}</label>
    
        <div class="col-sm-6">
          <input type="text" class="form-control" name="netipaddr" value="192.168.255.129" maxlength="20" required pattern="^(25[0-5]|2[0-4]\d|[0-1]?\d?[1-9]|[0-1]?[1-9][0])(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$">
        </div>
      </div>
    
      <div class="form-group sample_username">
        <label class="col-sm-3 control-label">{% trans "User Name" %}</label>
    
        <div class="col-sm-6">
          <input type="text" class="form-control" name="username" value="" maxlength="48" required pattern="[a-zA-Z0-9\.\-_]+">
        </div>
      </div>
      <div class="form-group sample_password">
        <label class="col-sm-3 control-label">{% trans "Password" %}</label>
    
        <div class="col-sm-6">
          <input type="password" class="form-control" name="password" value="" maxlength="48" required pattern="[a-zA-Z0-9\.\-_]+">
        </div>
      </div>
      <div class="form-group sample">
        <label class="col-sm-3 control-label">{% trans "Description" %}</label>
    
        <div class="col-sm-6">
          <input type="text" class="form-control" name="description" value="" maxlength="48" pattern="[a-zA-Z0-9\.\-_ ]+">
        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button>
        <button type="submit" class="btn btn-primary" name="create" value="1">{% trans "Create" %}</button>
      </div>
    
    
    </form>

    forms.py就在这里

    import re
    from django import forms
    from django.utils.translation import ugettext_lazy as _
    
    class BaseStationDetailsForm(forms.Form):
     type = forms.ChoiceField(required=True, choices=(('nokia', 'nokia'), ('sercomm', 'sercomm')))
     name = forms.SlugField(error_messages={'required': _('No base station name has been entered')}, max_length=20)
     ipaddr = forms.IPAddressField(error_messages={'required': _('Invalid IP Address')})
     netipaddr = forms.IPAddressField(error_messages={'required': _('Invalid IP Address')}) #test
     username = forms.CharField(error_messages={'required': _('No user name has been entered')}, max_length=48)
     password = forms.CharField(error_messages={'required': _('No password has been entered')}, max_length=48)
     description = forms.CharField(required=False, max_length=48)
    

    models.py

    from django.db import models
    
    class BaseStation(models.Model):
     name = models.CharField(max_length=20)
     address = models.IPAddressField()
     ipaddress = models.IPAddressField() #tests
     username = models.CharField(max_length=48)
     password = models.CharField(max_length=48)
     description = models.CharField(max_length=48, blank=True, null=True)
     status = models.IntegerField(default=0)
    
    def __unicode__(self):
        return self.name
    

    views.py(仅创建(发布)按钮:

                if 'create' in request.POST:
                form = BaseStationDetailsForm(request.POST)
                if form.is_valid():
                    data = form.cleaned_data
                    if basestations and data['name'] in basestation_names:
                        msg = _("Base Station with this name already exists")
                        errors.append(msg)
                    elif ip_addresses and data['ipaddr'] in ip_addresses:
                        msg = _("IP address " + data['ipaddr'] + " is already assigned to another Base Station")
                        errors.append(msg)
                    else:
                        _type = request.POST.get('type', '')
    
                        basestation = BaseStation(name=data['name'],
                                                  address=data['ipaddr'],
                                                  ipaddress=data['netipaddr'],
                                                  username=data['username'],
                                                  password=data['password'],
                                                  description=data['description'],
                                                  status='0')
                        # test
                        basestation.save()
    
                        return HttpResponseRedirect(request.get_full_path())
                else:
                    for error_key in form.errors:
                        for error_msg in form.errors[error_key]:
                            errors.append(error_msg)
    
    ### other post button functions code deleted
    
    return render_to_response('basestations.html', locals(), context_instance=RequestContext(request))
    

    示例 - 我可以显示/隐藏用户名/说明,创建按钮有效。只有当密码字段被隐藏时,该按钮才起作用。

2 个答案:

答案 0 :(得分:0)

您的密码字段包含属性required。这意味着需要此字段才能提交表单。

要防止出现此行为,请在表单提交期间使用以下标记。

<div class="col-sm-6">
   <input type="password" class="form-control" name="password" value="" maxlength="48" pattern="[a-zA-Z0-9\.\-_]+">
</div>

Mozilla Reference for HTML validations

答案 1 :(得分:0)

当您隐藏密码字段时,您还必须使用类似

的内容删除所需的属性
$('#password_field').removeAttr('required');​​​​

然后当您显示该字段时,再次添加所需的内容,以便在没有密码的情况下不提交表单。