Javascript:在[输入]上跳至下一个启用的文本框。

时间:2019-03-08 17:39:22

标签: javascript jquery

原谅任何错误的编码。

我正在尝试编写一个表单,其中当用户单击“ Enter”并且他们位于其中一个文本框中时,他们将继续下一个文本框,而不是提交表单。我有一部分代码可用于此操作,但当其中一个文本框被禁用(属性'disabled'='disabled')时,它将只是停止并且不会继续执行该操作。

我希望它跳过禁用的文本框,然后转到下一个文本框。

这是我的工作代码(击中并粘在禁用的文本框中)。我很尴尬地发表我为使这项工作所做的尝试:-|

    $('input').keydown(function (e) {
    var ae = document.activeElement; 
    if (
        ae.type != "button" &&
        ae.type != "submit" &&
        ae.type != "password" 
    )
    {
        var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        if (key == 13) {
            e.preventDefault();
            var inputs = $('form').find('input:visible');
            inputs.eq(inputs.index(this) + 1).focus();
        }
    }
});

2 个答案:

答案 0 :(得分:2)

您在这里。不需要jQuery。我希望代码能说明一切,但是如果需要,我很乐意详细解释它。

除了OP的请求(由Patrick Roberts提出的建议之外,还可以使用AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.);跳至上一个输入:

Shift+Enter
const inputs = Array.from(document.querySelectorAll('input'));
const enabledInputs = Array.from(document.querySelectorAll('input:enabled'));

inputs.forEach(elt => {
  elt.addEventListener('keydown', evt => {
    if (evt.key=='Enter') {
      let currentInputIndex = enabledInputs.indexOf(elt);
      let nextInputIndex;
      if (evt.shiftKey) {
        nextInputIndex = (currentInputIndex-1)%enabledInputs.length;
      } else {
        nextInputIndex = (currentInputIndex+1)%enabledInputs.length;
      }
      enabledInputs[nextInputIndex].focus();
    }
  })
})
input {
  display: block;
}

答案 1 :(得分:2)

赞美@Nino Filiu的jquery解决方案

var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
    if (key == 13) {
        e.preventDefault();
        var inputs = $('form').find('input:enabled'); //inputs are disabled not hidden
        inputs.eq(inputs.index(this) + 1).focus();
    }

更改位于input:enabled中,而不是input:visible中。后者将找到任何未隐藏的输入,前者将找到任何未禁用的输入