当文本框值长度达到最大值时,我希望它移动到下一个选项卡,或者3秒后它移动到下一个选项卡。这是我的代码:
$(".tab").keyup(function () {
var get = $(this);
if (get.val().length == this.maxLength) {
get.next('tr .tab').focus();
}
else {
setTimeout(function () {
get.next('tr .tab').focus();
}, 3000);
}
});
当光标位置为1时,它会移动2.但是当光标位于2时,它不会移动3. 这是HTML代码:
<table cellspacing="0" cellpadding="0">
<tr>
<td class="tds">Year / Number</td>
<td><input name="year" type="text" class="inputbox tab" maxlength="4" style="width:25px;" /> / <input name="number" type="text" class="inputbox tab" maxlength="2" style="width:25px;"/></td>
</tr>
<tr>
<td class="tds">Caption:</td>
<td><input name="caption" type="text" class="inputbox tab" style="width:500px;" /></td>
</tr>
<tr>
<td class="tds">Description:</td>
<td><input name="desc" type="text" class="inputbox tab" style="width:500px;" /></td>
</tr>
</table>
如果光标在1到2之间,如果它在2到3之后以及之后是3到4,我该如何管理聚焦?
答案 0 :(得分:2)
<强> LIVE DEMO 强>
var timeo, // Used for our timeout
$TAB = $('.tab'); // Cache all your input elements for reuse
$TAB.keyup(function () {
clearTimeout(timeo); // Clear timeout as you type
var $el = $(this), // cache element
val = this.value, // get value
len = this.maxLength, // get length
i = $TAB.index( this ); // get the index of current one
// so we can increase it using +1
if (len != -1 && val.length >= len) {
$TAB.eq(i+1).focus();
}
timeo = setTimeout(function () {
$TAB.eq(i+1).focus();
}, 3000);
});
我会尝试通过您的问题解释我的更改:
您的input
元素并非都位于同一个<TD>
父级内,因此您无法使用.next()
来获取.... {...> - 下“。
将所有输入缓存在$TAB
变量中。现在在keyup
内,我们需要跟踪当前使用的输入的index
,而不是增加i = $TAB.index( this );
的值,您可以从我们的input
中获取下一个索引$TAB
元素集合$TAB.eq(i+1) // is the next one in collection
即:
setTimeout
您没有正确清除timeo
,因此无需等待我们完成输入就会打勾。我使用timeout
变量来存储if (len != -1
,但也允许我们在输入字段时清除它。
此外,maxlength
将确保元素具有&& val.length >= len) {
属性,{{1}}将检查输入的值是否大于允许的最大长度。