Я пытаюсь создать ввод серийного номера из 4 частей, который автоматически продвигается для каждой части серийного номера.
Например 1-384-3884-39
Кроме того, как мне добавить строки в одну строку при отправке?
4 ответа
Я делаю для вас скрипку http://jsfiddle.net/fLz4LL9g/3/
Форма:
<form>
<input id="i1" class="i" type="number" value="">-
<input id="i2" class="i" type="number">-
<input id="i3" class="i" type="number">-
<input id="i4" class="i" type="number">
</form>
Код:
var digitsPerBox = 4;
/// EACH INPUT
$(".i").on("input",function(e) {
if (e.target.value.length == digitsPerBox) {
var t = $( e.target );
if (t.attr("id") == "i4") {
/// SUBMIT HERE
var txt = $("#i1").val() + "-" + $("#i2").val() + "-" + $("#i3").val() + "-" + $("#i4").val();
alert(txt);
} else {
/// AUTO FOCUS NEXT BOX
t.next().focus();
}
}
/// LIMIT DIGITS PER BOX
if (e.target.value.length > digitsPerBox) {
e.target.value = e.target.value.substr(0,digitsPerBox);
}
///// ONLY NUMBER ALLOWED
}).keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
Я нашел плагин ... но все же хотел бы узнать, как это сделать проще всего.
http://www.jqueryscript.net/form/jQuery-Plugin-For-Auto-Tab-Form-Fields-autotab.html
Если я вас правильно понимаю, я думаю, вы могли бы использовать эту функцию:
Рабочая демонстрация: http://jsfiddle.net/kfbjy8fr/1/
function getResult() {
var HTMLinsert = "",
values = $(document).find('input');
$.each( values, function( index, element) {
HTMLinsert += element.value
if (index !== values.length -1 ) {
HTMLinsert += '-'
}
})
return HTMLinsert;
}
var checkForTab = function() {
if ( $(this).prop('maxlength') === $(this).val().length ) {
$(this).closest('input').next().focus();
}
}
Я нашел эту кодовую ручку весьма впечатляющей: Он поддерживает:
- ввод только цифр или смешанный ввод (буквы+цифры)
(раскомментируйте код, если нужно) - копирование серийного номера
- проверка всего серийного кода на наличие ошибок ввода
(например, не заполняется только последнее поле)
У него нет кода геттера - вот возможная реализация меня:
<button onclick="evalResults(event)"> evalResults </button>
<script>
function evalResults(e) {
e.preventDefault();
let serial = '';
for(let i = 0; ++i <= valueLen / inputLen;) {
let serial_fragment = document.querySelector('.def-txt-input[name="chars[' + i + ']"]');
serial_fragment = serial_fragment.value.toString();
if (serial_fragment.length != inputLen) {
// invalid input - too few letters/digits
serial = undefined;
break;
}
serial += serial_fragment;
}
// serial: string if valid input
// undefined if invalid input
if (serial !== undefined) // valid input
alert('The serial is: ' + serial);
else // serial === undefined
alert('Invalid serial code');
}
</script>
Код с codepen.io:
<div class="container">
<div class="row">
<div class="col-xs-12">
<p>Paste the following in the first input or type</p>
<p>9847FG28RT038L71EE7U</p>
</div>
<div class="col-xs-12">
<form class="form">
<div class="form-group">
<div class="col-xs-12">
<label>Serial Number: </label>
</div>
<div class="col-xs-2"><input type="text" maxlength="4" class="def-txt-input form-control" name="chars[1]"> </div>
<div class="col-xs-2"><input type="text" maxlength="4" class="def-txt-input form-control" name="chars[2]"> </div>
<div class="col-xs-2"><input type="text" maxlength="4" class="def-txt-input form-control" name="chars[3]"> </div>
<div class="col-xs-2"><input type="text" maxlength="4" class="def-txt-input form-control" name="chars[4]"> </div>
<div class="col-xs-2"><input type="text" maxlength="4" class="def-txt-input form-control" name="chars[5]"> </div>
</div>
</div>
</div>
</div>
var $inputs = $(".def-txt-input");
var intRegex = /^\d+$/;
var valueLen = 20;
var inputLen = 4;
// Autotab replaces all the old code below
// https://github.com/Mathachew/jquery-autotab
$inputs.autotab({ format: 'alphanumeric', uppercase: true });
// Prevents user from manually entering non-digits.
/*
$inputs.on("input.fromManual", function(){
if(!intRegex.test($(this).val())){
$(this).val("");
}
});
*/
// Prevents pasting non-digits and if value is 6 characters long will parse each character into an individual box.
/*
$inputs.on("paste", function() {
var $this = $(this);
var originalValue = $this.val();
$this.val("");
$this.one("input.fromPaste", function(){
$currentInputBox = $(this);
var pastedValue = $currentInputBox.val();
if (pastedValue.length == valueLen && intRegex.test(pastedValue)) {
pasteValues(pastedValue);
}
else {
$this.val(originalValue);
}
$inputs.attr("maxlength", inputLen);
});
$inputs.attr("maxlength", valueLen);
});
*/
// Parses the individual digits into the individual boxes.
function pasteValues(element) {
// we split the original value in parts of inputLen length
var re = new RegExp('.{1,'+inputLen+'}','g');
var values = element.match(re);
$(values).each(function(index) {
var $inputBox = $('.def-txt-input[name="chars[' + (index + 1) + ']"]');
$inputBox.val(values[index])
});
};
Он имеет следующие зависимости (вы можете использовать его без таблицы стилей):
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery-autotab/1.9.2/js/jquery.autotab.min.js'></script>
Похожие вопросы
Связанные вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.