无法使用 jQuery 传递焦点下一个输入

Posted

技术标签:

【中文标题】无法使用 jQuery 传递焦点下一个输入【英文标题】:Unable to pass focus next input with jQuery 【发布时间】:2014-11-25 23:06:15 【问题描述】:

我有以下 html

<table>
<tr><td><input id="startMonth" placeholder="MM" class="dateInput"></td><td>/</td><td><input id="startDay" placeholder="DD" class="dateInput"></td><td>/</td><td><input id="startYear" placeholder="YY" class="dateInput"></td></tr>
<tr><td><input id="endMonth" placeholder="MM" class="dateInput"></td><td>/</td><td><input id="endDay" placeholder="DD" class="dateInput"></td><td>/</td><td><input id="endYear" placeholder="YY" class="dateInput"></td></tr>
</table>

使用以下 jQuery 脚本:

$('.dateInput').on('keyup', function () 
  if (this.value.length >= 2) 
    $(this).nextAll('input').first().focus();
  
)

事件触发,但焦点没有改变。我尝试从表单字段之间删除标签,但这也没有帮助。

【问题讨论】:

可能重复***.com/questions/10539113/… 事件在我想要的时候触发。问题是焦点没有改变。我的临时解决方法是将 keyup 事件单独绑定到每个字段,并使用它们的 ID 手动将焦点设置到字段。 【参考方案1】:

问题是.nextAll() 不是正确的方法,.next() 也不是。这些方法对兄弟元素进行操作。在这种情况下,输入是 td 元素的子元素,而这些元素又是 tr 的子元素。

index().eq() 方法在这里会很有帮助。但是,您可能需要调整最后一个元素的逻辑,因为没有下一个元素可以跳转。

$('.dateInput').on('keyup', function () 
  if (this.value.length >= 2) 
    var index = $('.dateInput').index( this ) + 1;
    $('.dateInput').eq( index ).focus();
  
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr><td><input id="startMonth" placeholder="MM" class="dateInput"></td><td>/</td><td><input id="startDay" placeholder="DD" class="dateInput"></td><td>/</td><td><input id="startYear" placeholder="YY" class="dateInput"></td></tr>
<tr><td><input id="endMonth" placeholder="MM" class="dateInput"></td><td>/</td><td><input id="endDay" placeholder="DD" class="dateInput"></td><td>/</td><td><input id="endYear" placeholder="YY" class="dateInput"></td></tr>
</table>

【讨论】:

太棒了!我提供了一些解释;如果您有任何具体问题,请告诉我。 ...简而言之,输入元素不是兄弟姐妹;这就是为什么你的方法不起作用的原因。

以上是关于无法使用 jQuery 传递焦点下一个输入的主要内容,如果未能解决你的问题,请参考以下文章

无法输入下一个输入字段 - jQuery

“Keypress”事件无法正常工作,使用 jQuery 和 Select2

如何使用 jQuery 将焦点移至下一个输入?

使用jQuery将焦点设置到下一个输入字段

如何使用虚拟键盘写入焦点输入?

jquery 怎么让输入框失去焦点