У меня есть форма в Flask, созданная с помощью WTForms.Включает 3 флажка и 9 других полей.7 из этих полей отключены, если отмечен один из трех флажков.
Вот лишь небольшая выборка флажка, поле, которое отключается при установке флажка, а также класс OptionalIf, который делаетвыбранное поле необязательно, если флажок отмечен:
class OptionalIf(Optional):
def __init__(self, otherFieldName, *args, **kwargs):
self.otherFieldName = otherFieldName
#self.value = value
super(OptionalIf, self).__init__(*args, **kwargs)
def __call__(self, form, field):
otherField = form._fields.get(self.otherFieldName)
if otherField is None:
raise Exception('no field named "%s" in form' % self.otherFieldName)
if bool(otherField.data):
super(OptionalIf, self).__call__(form, field)
Внутри моего класса формы:
holiday = BooleanField('Holiday?', id="holiday", validators=[Optional()])
start_time = TimeField(label='Start Time', id='timepick1', format='%H:%M', validators=[OptionalIf('holiday'), OptionalIf('holiday_noAddedHours'), OptionalIf('sick')])
holiday_noAddedHours
и sick
- это другие поля флажка, каждое из которых имеетих собственные ID: holidayNAH
и sick
.
Поскольку есть семь полей, которые нужно отключить, я должен иметь это в своих скриптах:
document.getElementById('holiday').onchange = function(){
document.getElementById('timepick1').disabled = this.checked;
document.getElementById('timepick2').disabled = this.checked;
....
}
document.getElementById('holidayNAH').onchange = function(){
document.getElementById('timepick1').disabled = this.checked;
document.getElementById('timepick2').disabled = this.checked;
....
}
А затем еще одно дляsick
ID.
Мне было интересно, можно ли сократить это, вместо того, чтобы иметь 3 document.getElementById
s и семь строк в этом, отключая поля, если флажок установлен?Я понимаю, что иметь один идентификатор невозможно, так как он getElementById
получает первый элемент, поэтому как мне поступить?
Спасибо за любой совет.