Javascript 在按下键或按键时,检测插入字符的位置

Javascript 在按下键或按键时,检测插入字符的位置,javascript,html,Javascript,Html,我不知道这是否可能(看起来不可能),但我正试图找到一种方法,在HTML输入标记的onKeyDown或onKeyPress事件中检测结果值 我使用这些事件很重要。我不能只使用onKeyUp,因为到那时输入已经改变了。我首先要防止它发生。我还尝试将按下的键字符追加到字符串的末尾,但这不适用于在输入字段的字符串开头键入字符的情况 有什么想法吗?我找了一段时间,似乎不可能,但我想我会问的 只需在按下键时检查值的长度。这也适用于删除字符 您还可以在返回false的条件中对此进行检查,以防止用户键入超过一定

我不知道这是否可能(看起来不可能),但我正试图找到一种方法,在HTML输入标记的onKeyDown或onKeyPress事件中检测结果值

我使用这些事件很重要。我不能只使用onKeyUp,因为到那时输入已经改变了。我首先要防止它发生。我还尝试将按下的键字符追加到字符串的末尾,但这不适用于在输入字段的字符串开头键入字符的情况


有什么想法吗?我找了一段时间,似乎不可能,但我想我会问的

只需在按下键时检查
值的
长度
。这也适用于删除字符

您还可以在返回
false
的条件中对此进行检查,以防止用户键入超过一定数量的字符。请注意,您可能希望对照退格和删除键(分别为keyCodes
8
46
进行检查,以便在达到最大长度后可以删除键

var input=document.getElementById('input');
input.onkeydown=功能(e){
console.log(input.value.length);
if(input.value.length==10){
如果(e.keyCode==8 | | e.keyCode==46){
返回true;
}否则{
返回false;
}
}
}

这里我有两个版本,一个是jQuery,另一个是JavaScript

$(“#inputJQuery”)。打开(“按键”,函数(ev){
console.log(“jQuery value:,$(this.val());//这是添加键之前的值
console.log(“jQuery selectionStart:”,this.selectionStart);//将插入字符的位置
console.log(“jQuery selectionEnd:,this.selectionEnd);//如果有选择,则此值将不同于上一个值
})
document.querySelector(“#inputVanilla”).onkeydown=函数(ev){
console.log(“香草值:”,this.value);//这是添加键之前的值
console.log(“VANILLA selectionStart:”,this.selectionStart);//将插入字符的位置
console.log(“VANILLA selectionEnd:,this.selectionEnd);//如果有选择,此值将不同于上一个值
}


感谢您的回复,但检查value.length似乎只是在应用新字符之前返回输入的长度。这不能帮助我确定在字符串中添加键的位置。例如,假设有人键入了数字100。然后他们在前面加一个1(使文本框变成1100。在将新值设置为输入之前,我需要知道新值,这样我才能阻止它。我不知道你的答案怎么可能。谢谢,我明白了-我的错。你可以随时检查
input.value
本身,比如
if(input.value==1100){return false;}
,但这只会在他们实际键入内容后进行检查。话虽如此,您确实不应该阻止他们键入任何内容,而应该在提交表单(或处理逻辑)后验证输入内容。我不确定我是否同意。如果您将输入类型设置为“数字”,chrome阻止任何非数字输入。我只是想扩展这一想法。允许负片,只要它们在正确的位置,例如,哦,是的,你当然可以在前端验证。虽然阻止实际输入是相当不寻常的,我不确定是否真的可以阻止输入NPUT不会被抢先输入。我个人会检查
blur()
事件,如果输入不被接受,则添加一条内联错误消息。这样用户就知道他们需要更改它。不过,前端验证永远都不够,您也应该始终在后端验证(别忘了你可以在提交表单后操作数据)。是的,后端是一个REST Api,所以我不认为请求甚至来自这个页面,或者是“一个页面”,lolI之前没有提到这一点,因为我没有意识到这是相关的,但我的输入是“number”类型。看起来这只适用于文本输入。你知道有什么办法吗?如果没有,我只能切换到文本类型。数字类型的输入是不可能的。