我希望限制用户仅将五个字符用于邮政编码。这是我到目前为止所拥有的(这似乎不起作用)。我要寻找的是如果有人不小心提交了五个以上的字符,那么该脚本将删除除五个最近的字符以外的所有字符。这是最好的路线吗?
sign-up.html
<script>
var max_chars = 5;
$('#zip_length').keydown( function(e){
if ($(this).val().length >= max_chars) {
$(this).val($(this).val().substr(0, max_chars));
}
});
$('#zip_length').keyup( function(e){
if ($(this).val().length >= max_chars) {
$(this).val($(this).val().substr(0, max_chars));
}
});
</script>
...
<form action="" method="POST" class="mt-4" enctype="multipart/form-data">
{% csrf_token %}
{% crispy form %}
</form>
...
forms.py
...
zip = forms.CharField(label='Zip', required=True,
widget=forms.TextInput(attrs={'placeholder': 'Enter your zip', 'id': 'zip_length'}))
...
def __init__(self, *args, **kwargs):
super(ProfileUpdateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
...
Row(
Column('city', css_class='form-group col-4'),
Column('state', css_class='form-group col-4'),
Column('zip', css_class='form-group col-4')
),
...
)
看起来您正在寻找form length validator。
实际上您可以这样写:
zip = forms.CharField(label='Zip', max_length=5, min_length=5 required=True, widget=forms.TextInput(attrs={'placeholder': 'Enter your zip', 'id': 'zip_length'}))
我不确定您的用例是什么,但是处理此错误的最用户友好的方法是向用户显示错误消息,以便她可以更正输入。如果您无声地截断最后一部分,则从技术上讲,它可能会使输入在技术上正确无误,但从用户角度来看是错误的。
也吉姆是正确的,也许您的所有用户的邮政编码长度都不会超过5个字符。