[英]when you press tab then it should tab to next blank text input box javascript without using tab index
表单中的示例有多个输入字段,其中有些字段在此之前会自动填充,如果我按Tab键,则应跳过该自动填充的输入字段并转到空白输入字段
我尝试了一下,但是当我开始写空白输入时会发生什么情况,它也将自动填充并跳过
$(".item-input").keyup(function () {
if (this.value.length !== 0) {
var $next = $(this).next('.item-input');
if ($next.length)
$(this).next('.item-input').focus();
else
$(this).blur();
}
});
我会将事件更改为keydown
而不是keyup
,因为keyup
已经已经处理了tab事件本身,并且那时您没有可以做的真正的取消操作(您可以直观地看到它跳到下一个字段,然后下一个空白代码已选择)
对于其他情况,我建议您首先获取所有元素,然后检查触发了事件的字段,然后开始检查索引+ 1中的其他字段
因此,总的来说,我想我会编写类似以下内容的代码(无需blur
您当前所在的字段, focus
于新字段即可)
有一个shiftKey
的句柄,以便用户仍然可以使用shift + tab来返回:)(我在该检查来自的链接中进行了注释)
let itemInputs = Array.from( document.querySelectorAll('.item-input') ); $('.item-input').on('keydown', function( e ) { if (e.shiftKey) { // no handling here // see: https://stackoverflow.com/questions/3044083/what-is-the-key-code-for-shifttab return; } switch (e.keyCode) { case 9: // we could have the loop in here, but hey, default returns out of the function // so this just skips till behind the switch statement break; default: return; } // find where we are in the original fieldset let index = itemInputs.findIndex( v => e.target === v ) + 1; // if we are equal or larger then itemInputs while (index < itemInputs.length) { if (itemInputs[index].value.length === 0) { // prevent the default step e.preventDefault(); itemInputs[index].focus(); return; } // try next index++; } } );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <fieldset> <div class="field"> <span class="label">Text 1</span> <span class="value"><input type="text" value="" class="item-input" /></span> </div> <div class="field"> <span class="label">Text 2</span> <span class="value"><input type="text" value="Skip me" class="item-input" /></span> </div> <div class="field"> <span class="label">Text 3</span> <span class="value"><input type="text" value="" class="item-input" /></span> </div> <div class="field"> <span class="label">Text 4</span> <span class="value"><input type="text" value="" class="item-input" /></span> </div> </fieldset>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.