Как установить фокус на CharField элемента формы Django - PullRequest
5 голосов
/ 24 ноября 2011

Я использую форму 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 %}
    <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>

Ответы [ 4 ]

14 голосов
/ 11 декабря 2013

Правильный способ ответа 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 для атрибутов объекта. Ура! * * 1004

3 голосов
/ 25 декабря 2015
    password = forms.CharField(
        widget=forms.PasswordInput(attrs={'autofocus': 'autofocus'}))

для ввода текста:

    field = forms.CharField(
        widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))
2 голосов
/ 24 июня 2015

Я просто хотел использовать форму входа в Django по умолчанию, но добавил атрибут автофокуса, поэтому я получил новый класс формы по умолчанию.

#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'),
    #...
    )
0 голосов
/ 24 ноября 2011

$("#id_username") должно быть $("#id_userName")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...