Python 如何自动聚焦到选定字段
我正在使用rfid扫描仪在表单中输入两个项目,RIN和rfid,一个接一个。扫描仪输出一个字符串并输入。我想自动聚焦到表单的第一个条目,然后是第二个条目。第一次按enter键不会更改页面,因为除非两个字段都已填写,否则无法提交。如何将页面焦点从第一页转到第二页?有更好的解决办法吗 views.pyPython 如何自动聚焦到选定字段,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
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。遗憾的是,按钮坏了,仍然需要点击。我几乎没有手了。