当一个字段已满时,将数据条目移动到下一个字段-JS制表
Move data entry to the next field when one is full - JS tabulation
我的脚本有问题。。
用户需要向一个div输入数据,当一个div已满(4个字符)时,脚本应该自动移动到下一个字段。
当使用输入时,效果非常好:http://jsfiddle.net/4m5fg/452/
但问题是我想通过虚拟键盘输入数据,我不能再使用焦点了。。因此,我尝试将数据输入到特定于类的div中,一旦div已满,就删除该类并将该类添加到下一个div中,但这不起作用。。
var a = document.getElementById("a"),
b = document.getElementById("b"),
c = document.getElementById("c");
var $write = $(".active");
$('#keyboard').click(function() {
var checka = $('#a').html().length;
var checkb = $('#b').html().length;
if (checka === 4) {
a.removeClass("active");
b.addClass("active");
} else if (checkb === 4) {
b.removeClass("active");
c.addClass("active");
}
var $this = $(this),
character = $this.html();
$(".active").html($write.html() + character);
});
$('.delete').click(function() {
var html = $write.html();
$write.html(html.substr(0, html.length - 1));
return false;
});
以下是演示:http://jsfiddle.net/4m5fg/456/
检查这个小提琴
$(".keyboard").on("click", function() {
$(".block").removeClass("active").filter(function() {
return this.innerText.length < 4;
}).first().addClass("active").append(this.innerText);
});
$(".delete").on("click", function() {
var inputs = $(".block").removeClass("active").filter(function() {
return this.innerText.length > 0;
}).last().addClass("active").html(function() {
return this.innerText.substr(0, this.innerText.length - 1);
});
});
如果你正在构建一个虚拟键盘,我建议使用class
而不是id
。这样,每个.keyboard
将变成key
,并且可以容易地被选择到输入中。
使用this.innerText.length
可以检查输入是否完整。。此外,您还可以使用一些已经具有的属性来更改4
,并使代码更加动态。
要更改"活动类",只需找到所有.blocks
并删除该类即可。。找到当前块后,只需再次附加它。
最后,DEL Key
找到带有一些文本的最后一个块,并删除最后一个字符。
EDIT:具有活动类的新示例
您的代码中存在一些问题。
- 要使用
.removeClass
和.addClass
函数,您需要一个jQuery对象,但不需要Node元素 - 在第一个div中输入4个
A
后,checka
仍然是4
,因此需要检查是否为checkb == 0
- 您每次都需要获得当前的
.active
,但不仅仅是在页面加载中。因此,您需要将var $write = $(".active");
放入click
事件中
var a = $("#a"),
b = $("#b"),
c = $("#c"),
$write;
$('#keyboard').click(function(){
var checka = $('#a').html().length;
var checkb = $('#b').html().length;
if (checka === 4 && checkb === 0) {
a.removeClass("active");
b.addClass("active");
}
else if (checkb === 4) {
b.removeClass("active");
c.addClass("active");
}
$write = $(".active");
var $this = $(this),
character = $this.html();
$(".active").html($write.html() + character);
});
$('.delete').click(function() {
var html = $write.html();
$write.html(html.substr(0, html.length - 1));
if ($write.html().length == 0) {
$write = $write.prev();
}
return false;
});
.block {
background: #fff;
color: red;
border: 0;
width: 45px;
height: 20px;
padding: 10px;
float: left;
margin: 5px;
}
input:focus, textarea:focus {
outline: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="a" class="block active" ></div>
<div id="b" class="block active2" ></div>
<div id="c" class="block" ></div>
<div id="keyboard">A</div>
<span class="delete">DEL</span>
您在这里有一些错误是修复代码:
var a = $("#a"),
b = $("#b"),
c = $("#c");
var $write = $(".active");
$('#keyboard').click(function(){
var checka = $('#a').html().length;
var checkb = $('#b').html().length;
if (checka === 4) {
a.removeClass("active");
b.addClass("active");
$write = b;
}
if (checkb === 4) {
b.removeClass("active");
c.addClass("active");
$write = c;
}
var $this = $(this),
character = $this.html();
$(".active").html($write.html() + character);
});
$('.delete').click(function() {
var html = $write.html();
if (html.length == 0) {
if ($write.is('#c')) {
$write.removeClass('active');
$write = b;
$write.addClass('active');
} else if ($write.is('#b')) {
$write.removeClass('active');
$write = a;
$write.addClass('active');
}
html = $write.html();
}
$write.html(html.substr(0, html.length - 1));
return false;
});
JSFIDDLE
<app-step1 class="star-inserted">
<div c79="" class="form-group mt-2 star-inserted">
<ng-otp-input c79="" _nghost-gtc-c25="">
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
<input id="" type="text" class="otp-input" c25="" maxlength="1" autocomplete="off" pattern="'d*" charCodeLimit='[48,57]'>
</ng-otp-input>
</div>
</div>
</app-step1>
和
var container = document.getElementsByClassName("star-inserted")[0];
container.onkeyup = function(e) {
var target = e.srcElement;
if (target.value.length >= target.maxLength) {
var next = target;
while (next = next.nextElementSibling) {
if (next == null)
break;
if (next.tagName.toLowerCase() == "input") {
next.focus();
next.setSelectionRange(0, next.value.length);
break;
}
}
}
}
container.onkeypress = function(e) {
let charCodeLimit = e.target.getAttribute("charCodeLimit");
if (charCodeLimit) {
let limit = JSON.parse(charCodeLimit);
if(limit.length==2){
return (e.charCode >= limit[0] && e.charCode <= limit[1]) || e.charCode == 0;
}
}
}
container.onclick = function(e) {
if (e.target.tagName.toLowerCase() == "input") {
e.target.select();
}
}
在线演示https://jsfiddle.net/nsvbtkzq/
相关文章:
- SIMPLE Javascript代码,用于显示谷歌电子表格中单个字段的数据
- 单击鼠标,用MySQL数据填充html表单输入字段
- 生成动态表单输入字段,并在angularJS中以数组形式收集字段数据
- 向FullCalendar日添加更多字段/数据
- 如何从自定义模块获取Magento中的字段数据
- 从数据库创建可单击列表,并在网页元素中返回相关的数据库字段数据
- 如何在煎茶上循环存储和计数字段数据
- 将鼠标悬停在表行上时,如何显示包含该行字段数据的弹出窗口
- 如何在 dialog() 模式弹出窗口中的部分视图之间保留字段数据
- 我想在搜索完成后保留我的输入字段数据
- VueJS设置输入字段数据
- 如何将字段数据从一种格式更改为另一种格式
- 如何将字段数据与其他字段数据进行比较
- 使用ajax提交多个字段数据
- 在onbeforeunload中使用Ajax自动保存字段数据
- 高级自定义字段数据不显示在Wordpress的花式框
- 将输入字段数据保存在选择选项值中
- 在Android/iOS浏览器上提交隐藏字段数据不起作用
- 查找字段数据类型不是NaN的所有记录
- 如何在 Javascript 或 J-Query 中动态访问用户输入的输入字段数据