Python 如何自动聚焦到选定字段

Python 如何自动聚焦到选定字段,python,django,rfid,Python,Django,Rfid,我正在使用rfid扫描仪在表单中输入两个项目,RIN和rfid,一个接一个。扫描仪输出一个字符串并输入。我想自动聚焦到表单的第一个条目,然后是第二个条目。第一次按enter键不会更改页面,因为除非两个字段都已填写,否则无法提交。如何将页面焦点从第一页转到第二页?有更好的解决办法吗 views.py def take(request): if request.method == "POST": form = TakeForm(request.POST) if form.is_val

我正在使用rfid扫描仪在表单中输入两个项目,RIN和rfid,一个接一个。扫描仪输出一个字符串并输入。我想自动聚焦到表单的第一个条目,然后是第二个条目。第一次按enter键不会更改页面,因为除非两个字段都已填写,否则无法提交。如何将页面焦点从第一页转到第二页?有更好的解决办法吗

views.py

def take(request):
if request.method == "POST":
    form = TakeForm(request.POST)
    if form.is_valid():
        take = form.save(commit=False)
        take.TA = request.user
        take.Timestamp = timezone.now()
        tool = Tool.objects.get(RFID=take.RFID.RFID)
        if tool.Out == False:
            tool.Out = True
            take.In_or_Out = 'Out'
            tool.Out_with = take.RIN
            tool.Times_used += 1 
            tool.Last_taken_out = timezone.now()
            tool.save()
            take.save()
        else:
            tool.Out = False
            take.In_or_Out = 'In'
            tool.Out_with = None
            tool.Last_taken_in = timezone.now()
            tool.Net_time_out += tool.Last_taken_in - tool.Last_taken_out
            tool.save()
            take.save()
        return redirect('take')
else:
    form = TakeForm()
return render(request, 'info/take.html', {'form': form})
forms.py

class TakeForm(forms.ModelForm):

class Meta:
    model = Take
    fields = ('RFID','RIN')
take.html

{% extends "info/header.html" %}
{% load staticfiles%}
{% block content %}

<script type="text/javascript">
    window.onload = function() {
        document.getElementById("id_RFID").focus();
    };
$(document).on('keydown', ':focusable', function (e) {
    if (e.which == 13) {
        e.preventDefault();
        // Get all focusable elements on the page
        var $canfocus = $(':focusable');
        var index = $canfocus.index(this) + 1;
        if (index >= $canfocus.length) index = 0;
        $canfocus.eq(index).focus();
    }
});

    <h1>Take In or Out</h1>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}
{%extends“info/header.html”%}
{%load staticfiles%}
{%block content%}
window.onload=函数(){
document.getElementById(“id_RFID”).focus();
};
$(文档).on('keydown',':可聚焦',函数(e){
如果(e.which==13){
e、 预防默认值();
//获取页面上所有可聚焦的元素
变量$canfocus=$(':focusable');
var index=$canfocus.index(this)+1;
如果(index>=$canfocus.length)index=0;
$canfocus.eq(index.focus();
}
});
进进出出
{%csrf_令牌%}
{{form.as_p}}
拯救
{%endblock%}

查看此SO帖子:从creimers答案中,在打开页面时对第一个字段使用自动对焦。稍后使用js更改焦点。在写入第一个字段后,可以使用jQuery的on-change方法进行切换。若要忽略enter,请首先将必需属性添加到字段(与在自动聚焦中相同),然后尝试重写表单的('submit')操作,如果某个字段丢失,则返回false,否则,在该函数中提交表单。添加了“Creimers”,但抛出的“TakeForm”对象没有属性“fields”错误。知道如何正确地将字段放入init?而且按钮不会在enter时提交。使用此按钮可将焦点向下移动到enter。遗憾的是,按钮坏了,仍然需要点击。我几乎没有手了。