Javascript 如何将焦点设置为django表单元素的CharField

Javascript 如何将焦点设置为django表单元素的CharField,javascript,jquery,python,django,Javascript,Jquery,Python,Django,我使用Django的表单作为我的登录页面我想在页面加载时将焦点设置为第一个文本字段(用户名)。我尝试使用Jquery,如下所示,但没有得到结果 forms.py: from django import forms class LoginForm(forms.Form): userName = forms.EmailField(max_length=25) password = forms.CharField( widget=forms.PasswordInput, la

我使用Django的表单作为我的登录页面
我想在页面加载时将焦点设置为第一个文本字段(用户名)。
我尝试使用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 %}
    <script type="text/javascript">
        $(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
            };  
        }); 
        </script>       
    {% endblock %}

{% block content %} 
<form method = "POST" action ="/login/">{% csrf_token %}
<table align ="center">
    {{ form.as_table }}
<tr><td></td></tr>
<tr><td><input type="submit" value="Submit"></td></tr>
</table>
</from>
%block headextra%}
$(文档).ready(函数(){
window.onload=函数(){
$(“#id_用户名”).focus();
//如果我添加此行,则会发出警报(“测试”)
//将焦点设置为文本框,该文本框使用html标记直接添加到模板页面,focus()方法效果良好
};  
}); 
{%endblock%}
{%block content%}
{%csrf_令牌%}
{{form.as_table}}

$(“#id_username”)
应该是
$(“#id_username”)
回答这个问题的正确Django方法如下(因为它不依赖于启用js):


此外,对于记录,我们避免对对象属性使用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': ''})
然后我在
url.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'),
    #...
    )
对于文本输入:

    field = forms.CharField(
        widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))

在html中,您所需要的就是无参数的
自动对焦

在Django表单中,将自动对焦添加为具有空值的键:

search = forms.CharField(
                label='Search for:',
                max_length=50,
                required=False,
                widget=forms.TextInput(attrs={'autofocus': ''}))

我还没有找到一个地方可以使用表单而不是视图清晰地实现django的LoginForm。您可以分享一下您的实现的其余部分吗。如何从视图中调用此表单,等等。谢谢。Heya@jangeador我不久前启动了一个项目,在这里有一个完整自定义用户模型的基本实现:--这仍然是alpha,但可能提供了您正在寻找的示例。干杯@jangeador确切形式的链接在这里:我更喜欢使用语法
attrs.update(autofocus='autofocus')
attrs.update(autofocus='')
(因为该值不相关)。从语法上讲,将关键字参数传递给
.update()
,更简单。在回答带有多个答案的旧线程时,尤其是其中一个已被接受时,请小心。您需要解释为什么您的答案比任何现有答案都好。此外,您还需要支持示例代码,解释它如何解决OP的问题。帮助别人理解。对不起,我没有时间。在阅读了相关的Django文档之后,我认为这一点非常明显。您已经成为StackOverflow的成员很长时间了,您现在应该知道它是如何工作的。这里没有人强迫你回答问题。如果您选择回答一个问题,那么您的答案将由更广泛的社区进行评估。
    field = forms.CharField(
        widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))
search = forms.CharField(
                label='Search for:',
                max_length=50,
                required=False,
                widget=forms.TextInput(attrs={'autofocus': ''}))