【发布时间】:2015-12-07 20:01:14
【问题描述】:
我想用以下实现来实现文本input:
- 只允许数字
- 限制数字从 0 到 255
- 如果输入了“非法”字符(非数字,或大于或小于 255),
input应被禁用,稍等片刻,然后删除无效字符,然后返回焦点。
感谢this answer,我实现了所有这些。不过有一个问题。如果输入 35(即“合法”),然后在 3 和 5 之间移动光标,然后输入 1,即为 315。这变为“非法”,因为它超过 255。所以 5 被删除。我不想删除 5,我希望删除 1,因为那是最后输入的。
但是如果你输入 31,那么 5, 5 应该被删除。基本上,我希望在插入非法数量时删除最后一个输入数字。
另外,我希望光标移动到最后一个删除字符的位置,无论是数字还是字母。
代码如下:
function disableInput(el) {
var checks = [/\D/g.test(el.value), el.value > 255];
if (checks.some(Boolean)) {
$(el).prop("disabled", true)
.queue("disabled", function() {
$(this).prop("disabled", false)
});
setTimeout(function() {
if (checks[0]) {
el.value = el.value.replace(/\D/g, '');
}
if (checks[1]) {
el.value = el.value.slice(0, 2);
};
$(el).dequeue("disabled").val(el.value).focus()
}, 1000)
}
}
$('input[name="number"]').keyup(function(e) {
disableInput(this)
$(this).focus();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number" />
【问题讨论】:
-
你能利用 input[type=number] 吗?
<input type="number" name="number" max="255" min="0" onchange="this.reportValidity()"> -
您已经拥有的大部分代码似乎都来自您链接的那个答案,您并没有尝试以任何方式自己解决这个“删除最后输入的数字”问题,只是要求其他人为您编写代码,而不是试图理解问题。
-
@amphetamachine 这不起作用,因为数字允许您输入“非法”值
-
@DJDavid98 我确实尝试过 `if (checks[1]) { el.value = el.value.replace(/\D/g, ''); };那没有用
标签: javascript jquery input