如何防止用户删除文本输入中的前三个字符
How to prevent a user from removing the first three characters in a text input?
我有一个文本输入,当页面加载时,它有三个动态生成的字符On;我想要的是,当用户在该字段中输入数据时,用户应该无法从输入中删除前三个字符。
文本输入总共可以包含10个字符,其中3个是我们生成的,7个是用户输入的。
目前,如果用户按下退格键,他可以删除所有字符,但我不想让他们删除前三个字符。
在页面加载时,脚本在实验室文本输入中设置三个字符:
<input id="Lab" maxlength="10" name="LabWareId" type="text" value="" class="valid">
$('#Lab').keyup(function () {
if ($(this).val().length == $(this).attr('maxlength'))
$('#DateReceived').focus();
});
选项1:将3个字符的前缀放在输入之外。从用户体验的角度来看,这是最好的。
<p>abc <input id="Lab" maxlength="10" name="LabWareId" type="text" class="valid"></p>
选项2:检查是否按退格键并相应地阻止删除。
$(document).on('keydown', function (e) {
if (e.keyCode == 8 && $('#Lab').is(":focus") && $('#Lab').val().length < 4) {
e.preventDefault();
}
});
试试这个(这不是最好的解决方案,但它有效):
Fiddle
$(document).ready(function() {
$("#tb").on("keyup", function() {
var value = $(this).val();
$(this).val($(this).data("initial") + value.substring(3));
});
});
请注意,如果我用鼠标突出显示前3个字符,并将它们移动到其他文本的末尾,它不会抱怨并允许这样做,这不是你想要的。
我可能会把生成的3个字符放在输入的左边,所以用户认为这些字符是不可编辑的。你可以这样使用引导程序使这个看起来有点不错。
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<label for="basic-url">Enter thingy:</label>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">ABC</span>
<input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3" maxlength="7" placeholder="Enter 7 characters">
</div>
将3个字符放在可编辑区域之外是最简单/最好的方法。
然而,对于3个字符必须在输入标记中的情况,我的纯JavaScript方法也处理用户按下delete键或试图删除第一个字符的情况。如果用当前选择按下删除键意味着将保留不到4个字符,或者将删除开头的字符(删除选择或按退格键),则会抑制此用户操作。
该脚本将class=="的所有输入标签添加到class=";有效的";keydown事件处理程序调用函数keepLeadingChars(e),该函数首先确保按退格键在开头留下3个字符,然后确保删除所选内容在开头留下至少3个字符(或函数调用中指定的任何其他数字)。
// add keydown event to input tags
var inputs = document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i++) {
var ClassAttr = inputs[i].getAttribute("class");
if (ClassAttr=="valid") {
inputs[i].addEventListener("keydown", function(e) { keepLeadingChars(e,3); } );
}
}
function keepLeadingChars(e,count) {
// if backspace key (8) pressed and ...
if (e.keyCode==8) {
// ... content length < 4 then prevent user action
if (e.target.value.length<count+1) {
e.preventDefault();
}
// ... cursor is within first characters at beginning then prevent user action
var start = e.target.selectionStart;
if (start<count+1) {
e.preventDefault();
}
}
// if delete key (46) pressed and ...
if (e.keyCode==46) {
var start = e.target.selectionStart;
var end = e.target.selectionEnd;
var selLength = end-start; // length of selection
var totalLength = e.target.value.length;
//console.log(totalLength-selLength);
// ... remaining length < 3 then prevent user action
if (totalLength-selLength<count) {
e.preventDefault();
}
// ... selection is within first characters at beginning then prevent user action
if (start<count) {
e.preventDefault();
}
}
}
intput 1: <input id="Lab1" maxlength="10" name="LabWareId" type="text" value="1234567" class="valid"><br />
intput 2: <input id="Lab2" maxlength="10" name="LabWareId" type="text" value="1234567" class="valid">
我将添加此解决方案作为另一种可能对某人有用的替代方案。
它使用jQuerybefore()方法。它的工作原理与以前的CSS类似,但也使用输入元素。但是,您必须添加一些额外的样式,以使前缀看起来在输入中。
另请参阅:我可以在输入字段上使用:after伪元素吗?
运行代码片段以尝试
$('#Lab').before('<span class="prefix">' + $('#Lab').data('prefix') + '</span>');
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;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
<input id="Lab" maxlength="10" name="LabWareId" type="text" data-prefix="123">
</form>
添加输入,使它们看起来像单个输入。
<span>
<input type="text" value="abc" readonly style="border-right: none;outline: none;width:25px"/>
</span>
<input type="text" style="border-left: none;outline: none;"/>
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 如何使用PHP和JS级联三个下拉列表
- 灯光问题(使用三个.js)
- 在三个.js中创建球体(例如地球)的磁力线
- 如何替换javascript字符串中的前三个连字符
- 如何防止用户删除文本输入中的前三个字符
- 文本框事件中的第三个字符
- 如何使用正则表达式检查三个字符长度
- /(S)1(1)+/g 匹配三个相等的非空格字符紧随其后的所有匹配项
- 如何从字符串中剪切第三个符号,并在没有第三个字符的情况下提醒它
- 每隔三个数字字符添加一个逗号
- 如何在JavaScript中的表单中每三个字符添加一个空格并具有替换函数
- 如何在bootstrap中搜索三个字符后的打字头
- javascript中的三个字符月和文化匹配
- 正则表达式检查前三个字符的数字是不工作的字母
- 如何获得字符串的前三个字符
- 限制字符,并且在angular js和ionic中后面有三个点
- 如何基于前三个字符设置元素样式
- 让用户在输入文本字段中只键入三个不同的字符
- 如何在javascript中每三个字符添加一个换行符