Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中按键后获取字符串值_Javascript - Fatal编程技术网

在Javascript中按键后获取字符串值

在Javascript中按键后获取字符串值,javascript,Javascript,我想要的不是在javascript中模拟按键事件,而是在按键后获取字符串的值 澄清;给定一个文本输入,我想看看如果用户按下某个键,我的文本输入值是多少 i、 我想要下面的函数 function getStringValueAfterKeyPress(string, cursorPosition, keyCode) { // returns string value after key press with provided code on provided cursor position

我想要的不是在javascript中模拟按键事件,而是在按键后获取字符串的值

澄清;给定一个文本输入,我想看看如果用户按下某个键,我的文本输入值是多少

i、 我想要下面的函数

function getStringValueAfterKeyPress(string, cursorPosition, keyCode) {
    // returns string value after key press with provided code on provided cursor position
}

getStringValueAfterKeyPress('test', 4, 8) // returns 'tes' (8 is keycode of backspace)
getStringValueAfterKeyPress('test', 4, 37) // returns 'test' (37 is keycode of left arrow, hence string value has not changed)
getStringValueAfterKeyPress('test', 4, 49) // returns 'test1' (49 is keycode of '1')
等等。有没有一个简单的方法可以做到这一点


我的用例是在afterKeyDown事件中使用这个方法,在按下这个键后使用这个方法获取输入元素的值,如果它与某个正则表达式不匹配,则阻止该操作。

您可以通过处理
输入事件来验证输入,该事件在每次输入字段发生更改时触发,包括按键、复制/粘贴、拖放等

下面是一个验证不允许数字的名称输入字段的示例

//我们的验证函数用于停止输入数字
函数noNumbersAllowed(){
this.value=this.value.replace(/\d/g,“”);
}
//保留对元素的引用,这样我们就不必重复搜索DOM
var nameInput=document.getElementById(“名称”);
//创建一个删除所有数字的输入事件侦听器
nameInput.addEventListener(“输入”,不带编号);
//集中注意力,因为我们很好
nameInput.focus()

我能想到的唯一方法是做你说不想做的事,然后在输入上模拟按键,然后得到它的值。@markschultheis我不这么认为。OP不是询问如何在按键后获取光标位置,而是询问如何处理字符串,以将其更改为用户在手动编辑该字符串时实际按下提供的键时的外观。@Markschultheis,但您投票将其作为副本关闭??您可以获得当前聚焦的元素,在背景中使用任何你需要的魔法来模拟输入中的按键,然后将焦点设置回原始元素,但我认为你可以使用一个不属于DOM的元素,这样你就不会失去焦点。看看我发布的答案-我认为你要走一条漫长而艰难的道路,在我的实际用例中,我有一个输入元素,用户可以在其中输入最多两位小数的数值。因此1.00有效,但1.000无效,或者1..0无效。因此,我无法仅通过查看输入的字符或修改用户输入来验证输入。我的输入框最初有一个有效值,我希望防止任何可能导致输入值无效的操作。是的,您可以-只需将输入设置为
Number(this.value.)。toFixed(2)正确验证输入比猜测输入按键及其含义容易得多。从HTML5开始,输入验证也变得原生。。。在问题评论中还有来自ADyson的链接。任何一种验证方法都肯定比原始方法更容易实现。假设输入的当前值为“1.00”,用户按“.”键。我无法将“1.00”转换为数字,结果是NaN。相反,我希望阻止用户在末尾输入最后一个“.”字符。在这种情况下,将最后一个有效值作为数据属性存储在元素上,如果它在更改时变为无效,则将其设置回最后一个有效值。这些显然只是简单的例子——你可以用它做任何你想做的事情。在所有浏览器中都很难实现按键操作,而且在将来的版本(最有可能是IE)中肯定会失败。使用HTML5模式可能是最能证明未来的方法。