设置:
在具有并排三个文本输入的html页面上,“文本1”是jQuery自动完成功能,同时还有“文本3”,“文本2”只是普通的文本框。 按照下面的屏幕截图。
任务:
我要实现的行为是,在最后一个文本框(“文本3”,这是一个jQuery自动完成功能)中进行选择后,焦点移回到了[TAB]
上的“文本2”文本框中按下,其行为应类似于在自动完成列表中选择后按下[SHIFT] + [TAB]
的行为。
问题:
这对“文本1”有效,主要是因为无论如何焦点都将移至“文本2”。为了在[Enter]
上正确移动,我在自动完成功能的select事件上捕获了event.keypress==13
。
在“文本1”中,如果我按[Enter]
或[TAB]
(这是正确的行为),则会选择最高值并将焦点转移到“文本2”。
$("#Text1").autocomplete({
source: someArray,
autoFocus: true,
delay: 50,
select: function (event, ui) {
$('#Text1').data('someid', ui.item.uKey);
//Ensure move to next field on [Enter]
if (event.keyCode == 13) {
$('#Text2').focus();
}
},
close: function (event, ui) {
}
});
在使用TAB
键的情况下,此捕获似乎不起作用。
如果我修改了自动完成功能的select
事件,则可以捕获keypress事件,但是如果我请求相同的行为,它将无法正常工作。
...
//amended select statement
select: function (event, ui) {
$('#Text1').data('someid', ui.item.uKey);
//Try capture [TAB] and move to next field on [TAB] keypress ** doesn't work ! **
if (event.keyCode == 9) {
$('#Text2').focus(); //focus doesn't move, though Text1 loses it...
}
//Ensure move to next field on [Enter]
if (event.keyCode == 13) {
$('#Text2').focus();
}
},
如果我尝试控制“文本3”文本框的keypress事件上的[TAB]
键的行为,我将无法控制。在[Enter]
上没有问题,请更正重定向,但在[TAB]
上则没有问题。
我尝试捕获文本框上的keypress事件(自动完成之外),这确实捕获了keypress事件,但也没有将焦点移到“文本2”上。
我在“文本3”的event.preventDefault();
按下事件中尝试过stopPropagation();
和[TAB]
,但实际上,它只是停止了任何传播;如果您选择自动完成,则不会选择自动完成...
$('#Text3').keypress(function(event){
if (event.keyCode==9){
event.preventDefault();
event.stopPropagation();
$('#Text2').focus();
}
});
那么,如何选择顶部项目并且将焦点重定向到[TAB]
按下事件时自动完成功能上的任何所需字段?