如何将焦点设置为django表单元素的CharField
我在登录页面使用Django的表单。 I want to set focus to the first textField (username) when the page loads.
我尝试使用Jquery如下,但是没有得到结果。
forms.py: from django import forms class LoginForm(forms.Form): userName = forms.EmailField(max_length=25) password = forms.CharField( widget=forms.PasswordInput, label="password" )
的login.html
% block headextra %} $(document).ready(function() { window.onload = function() { $("#id_username").focus(); // alert('test') if I add this line its works // setting focus to a textbox which added to template page direcltly using html tag the focus() method works well }; }); {% endblock %} {% block content %}
$("#id_username")
应为$("#id_userName")
正确的Django回答这个问题的方法如下(因为它不依赖于js被启用):
from django import forms class LoginForm(forms.Form): user_name = forms.EmailField(max_length=25) password = forms.CharField( widget=forms.PasswordInput, label="password" ) def __init__(self): self.fields['user_name'].widget.attrs.update({'autofocus': 'autofocus' 'required': 'required', 'placeholder': 'User Name'}) self.fields['password'].widget.attrs.update({ 'required': 'required', 'placeholder': 'Password'})
此外,为了记录,我们避免使用camelcase作为对象属性。 干杯!
我只是想使用默认的Django登录表单,但是添加了autofocus属性,所以我从默认情况下派生了一个新的表单类。
#myapp/forms.py from django.contrib.auth.forms import AuthenticationForm class LoginForm(AuthenticationForm): def __init__(self, *args, **kwargs): super(LoginForm, self).__init__(*args, **kwargs) self.fields['username'].widget.attrs.update({'autofocus': ''})
然后我在urls.py
指定了新的表单类:
from myapp.forms import LoginForm urlpatterns = patterns( '', url(r'^login/$', 'django.contrib.auth.views.login', {"template_name": "myapp/login.html", "authentication_form": LoginForm, "current_app": "myapp"}, name='login'), #... )
password = forms.CharField( widget=forms.PasswordInput(attrs={'autofocus': 'autofocus'}))
用于文本输入:
field = forms.CharField( widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))