如何防止用户删除文本输入中的前三个字符?
我有一个文本输入,当页面加载时有三个动态生成的字符; 我想要的是当用户输入数据时,用户应该无法从输入中删除前三个字符。
文本输入总共可以包含10个字符,我们生成3个字符,用户输入7个字符。
目前,如果用户按退格键,他可以删除所有字符,但我不想让他们删除前三个字符。
在页面加载时,脚本在Lab文本输入中设置三个字符:
$('#Lab').keyup(function () { if ($(this).val().length == $(this).attr('maxlength')) $('#DateReceived').focus(); });
选项1 :将3个字符前缀放在输入之外。 从用户体验的角度来看,这是最好的。
abc
选项2 :检查退格键按压并相应地防止删除。
$(document).on('keydown', function (e) { if (e.keyCode == 8 && $('#Lab').is(":focus") && $('#Lab').val().length < 4) { e.preventDefault(); } });
试试这个(这不是最好的解决方案,但它有效):
小提琴
$(document).ready(function() { $("#tb").on("keyup", function() { var value = $(this).val(); $(this).val($(this).data("initial") + value.substring(3)); }); });
请注意,如果我使用鼠标突出显示前3个字符并将其移动到其他文本的末尾,则不会抱怨并允许它不是您想要的。
我可能会将3个生成的字符放在输入的左侧,因此用户不认为这些是可编辑的。 你可以使用bootstrap这样看起来很好看。
ABC
我正在添加此解决方案作为另一种可能对某人有用的替代方案。
它使用jQuery before()方法。 它的工作方式与之前的CSS类似,但也与输入元素类似。 但是,您必须添加一些额外的样式,以使前缀看起来在输入内。
另请参阅: 我可以在输入字段上使用:after伪元素吗?
运行代码段尝试
$('#Lab').before('' + $('#Lab').data('prefix') + '');
form { background-color: lightgray; padding: 2em; } #Lab { border: 1px solid gray; border-left: none; width: 10em; } .prefix { color: dimgray; background-color: white; border: 1px solid gray; border-right: none; font-family: monospace; font-size: 16px; }