У меня есть раскрывающийся список и кнопка «Отправить» на странице. Некоторые поля исчезают при выборе определенного раскрывающегося списка. Я могу скрыть / показать все остальные поля, кроме поля пароля. Всякий раз, когда я скрываю поле пароля с помощью jquery, кнопка отправки не работает. Ниже приведены мои файлы кода.
< 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 (только кнопка create (post) дает:
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))
Пример - я могу показать / скрыть имя пользователя / описание, кнопка создания работает. Только когда поле пароля скрыто, кнопка не работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поле вашего пароля имеет атрибут required. Это означает, что это поле необходимо для отправки формы.
Чтобы предотвратить такое поведение, во время отправки формы вам потребуется следующая разметка.
<div class = "col-sm-6">
<input type = "password" class = "form-control" name = "password" value = "" maxlength = "48" pattern = "[a-zA-Z0-9\.\-_]+">
</div>
Когда вы скрываете поле пароля, вам также необходимо удалить обязательный атрибут с чем-то вроде этого
$('#password_field').removeAttr('required');
А затем, когда вы покажете поле, снова добавьте необходимое, чтобы форма не отправлялась без пароля.