在TAB和/或ENTER

时间:2018-07-31 07:34:21

标签: javascript jquery autocomplete

设置:

在具有并排三个文本输入的html页面上,“文本1”是jQuery自动完成功能,同时还有“文本3”,“文本2”只是普通的文本框。 按照下面的屏幕截图。

enter image description here

任务:

我要实现的行为是,在最后一个文本框(“文本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]按下事件时自动完成功能上的任何所需字段?

0 个答案:

没有答案