我们是否可以在angularjs中仅使用一个输入字段来创建输入字段,就像在图像中一样。每个框应该只允许一个数字。
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
<li><input type="text" maxlength="1" onkeypress="return isNumber(event,$(this))"></li>
function isNumber(evt,ele) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
if(ele.val().length == 0){
ele.parent().next().children('input').focus();
}
return true;
}
我使用了十二个输入框。有没有其他方法可以做到这一点。 我还需要避免使用jquery。
答案 0 :(得分:2)
不,你不能。
但是,您可以通过改善用户的退格/打字方便性来改进您的实施。
以下是一个例子:
var wrapper = document.getElementById('myInputWrapper');
var numberOfInputs = 12;
var inputList = [];
for(var i=0; i<numberOfInputs; i++){
var input = document.createElement('input');
input.type = "text";
input.setAttribute('data-number', i+1);
inputList.push(input);
wrapper.appendChild(input);
input.addEventListener('keydown', function(e){
// If backspace
if(isBackspace(e)){
if(this.value.length == 0){
var previus = parseInt(this.getAttribute('data-number')) - 2;
if(previus >= 0){
inputList[previus].focus();
}
}
return true;
}
// If isNumber
else if(isNumber(e)){
if(this.value.length > 0){
this.value = this.value[this.value.length - 1];
var next = parseInt(this.getAttribute('data-number'));
if(next < numberOfInputs){
if(inputList[next].length > 0)
inputList[next].value = "";
inputList[next].focus();
} else {
this.value = "";
}
}
return true;
}
e.preventDefault();
return false;
}, false);
// Put curet on the end
input.addEventListener('click', function(e){
this.value = this.value;
}, false);
// oh.. someone has paste something
input.addEventListener('paste', function(e){
// Get Text
var pastedText = undefined;
if (window.clipboardData && window.clipboardData.getData) { // IE
pastedText = window.clipboardData.getData('Text');
} else if (e.clipboardData && e.clipboardData.getData) {
pastedText = e.clipboardData.getData('text/plain');
}
// Error?
if(!pastedText) return;
var digits = pastedText.match(/\d/g);
// No digits
if(!digits) return;
var data = [];
for(var i=0; i<digits.length; i++){
data.push(parseInt(digits[i]));
};
updateInputs(data);
e.preventDefault();
}, false);
}
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 8) {
return false;
}
return true;
}
function isBackspace(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode == 8) {
return true;
}
return false;
}
function updateInputs (array){
for(var i=0; i<array.length && i<numberOfInputs; i++)
inputList[i].value = ("" + array[i])[0];
for(var i=array.length; i<numberOfInputs; i++)
inputList[i].value = "";
}
function getInputs (array){
var data = [];
for(var i=0; i<numberOfInputs; i++)
if(inputList[i].value.length == 1)
data.push(inputList[i].value);
else
data.push(null);
return data;
}
document.getElementById('testInsert').addEventListener('click', function(){
updateInputs([1,2,3,4,5,6,7,8,9,10,11,12]);
}, false);
document.getElementById('testExtract').addEventListener('click', function(){
alert(getInputs());
}, false);
&#13;
#myInputWrapper input{
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
border: 1px solid #afafaf;
}
#myInputWrapper input:not(:first-child) {
border-left: 0px;
}
&#13;
<div id="myInputWrapper"></div>
<br>
<input type="button" value="Test Data Insert" id="testInsert">
<input type="button" value="Test Data Extract" id="testExtract">
&#13;
这里也是: https://jsfiddle.net/cbh0f3xe/1/
修改强> 添加了粘贴支持。