我有一个限制为 16 个数字的输入框。我想为美学做的是每 4 个数字放置一个间隙。
例如。当一个人进入
1234567891234567
它应该看起来像这样
1234 5678 9123 4567
这怎么可能在 JQuery 中的 Key Up 上实现?
我有一个限制为 16 个数字的输入框。我想为美学做的是每 4 个数字放置一个间隙。
例如。当一个人进入
1234567891234567
它应该看起来像这样
1234 5678 9123 4567
这怎么可能在 JQuery 中的 Key Up 上实现?
这是另一个解决方案:
$(function() {
$('#my-input')
.blur(function() {
var value = $(this).val();
value = value.match(/.{1,4}/g).join(" ");
$(this).val(value);
})
.focus(function() {
var value = $(this).val();
value = value.replace(/\s/g, '');
$(this).val(value);
});
});
你可以看看那个工作的jsFiddle。
我添加了一个focus
事件以使其更加用户友好。总结一下:
您可以使用模数函数:
$("input").keyup(function(){
var $this = $(this);
if ((($this.val().length+1) % 5)==0){
$this.val($this.val() + " ");
}
});
然而它有点错误,但对你来说可能是一个很好的起点。
正如其他用户所提到的,这对可用性不利,最好使用 4 个文本框(如果长度始终为 16)并使用如下内容:
$("input").keyup(function(){
var $this = $(this);
if ($this.val().length>=4){
$this.next().focus();
}
});
同样,可能有点错误,我只是指出不同的方法。
如果您考虑将其放在多个文本框中,请尝试以下解决方案。
$(function() {
var charLimit = 4;
$(".inputs").keydown(function(e) {
var keys = [8, 9, /*16, 17, 18,*/ 19, 20, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 144, 145];
if (e.which == 8 && this.value.length == 0) {
$(this).prev('.inputs').focus();
} else if ($.inArray(e.which, keys) >= 0) {
return true;
} else if (this.value.length >= charLimit) {
$(this).next('.inputs').focus();
return false;
} else if (e.shiftKey || e.which <= 48 || e.which >= 58) {
return false;
}
}).keyup (function () {
if (this.value.length >= charLimit) {
$(this).next('.inputs').focus();
return false;
}
});
});
它具有以下特点,
- 下一个输入的自动选项卡
- 只有数字
- charLimit - 设置为不同的长度
演示:http: //jsfiddle.net/skram/qygB2/20/
我会在这里使用keypress
处理程序:
$("#someinput").on('keypress',function(){
var currval = this.value.replace(/\s+/g,'');
return (this.value += currval.length && currval.length%4 < 1 ? ' ' : '', true);
});
像这样的东西
$('input').keyup(function(){
var val = $(this).val();
if(val.length >= 4){
$(this).next().focus();
}
});
编辑:嗯,你的例子不如上面这个,所以我添加了这个。
$('#textbox').on('keyup', function(e) {
var val = this.value;
if (e.which != 8 && e.which != 46) { // handle delete and backspace
if (val.replace(/\s/g, '').length % 4 == 0) {
$(this).val(val + ' ');
}
} else {
$(this).val(val);
}
})
这是您可能要考虑的另一种解决方案
OnBlur = function()
{
var value = $('#txtName').val().replace(/\s/g, "");
var numberOfSpaces = Math.ceil(value.length / 4)-1;
while(numberOfSpaces >0)
{
value = value.substr(0,numberOfSpaces*4) + ' ' + value.substr(numberOfSpaces*4);
numberOfSpaces--;
}
}